欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

PHP 16: MySql的數(shù)據(jù)庫訪問

系統(tǒng) 1946 0
原文: PHP 16: MySql的數(shù)據(jù)庫訪問

本章介紹PHP訪問MySql的方法。
如果你對MySQL不是很清晰,可以參看 PHP 17: MySQL的簡單介紹
對于數(shù)據(jù)庫的操作,無非就是以下幾個點:

  • 如何連接到數(shù)據(jù)庫
  • 如何執(zhí)行SQL
  • 如何返回數(shù)據(jù)結(jié)果集
  • 如何從結(jié)果集取出數(shù)據(jù)
  • 關(guān)閉連接
?以上就是數(shù)據(jù)庫的常規(guī)操作。
對于MySQL而言,由于其版本不同,訪問數(shù)據(jù)庫的方法也不同。PHP4有個MySQL一般的訪問方法,過程都是以"mysql_"為前綴的。當(dāng)?shù)搅薖HP5,除了它,還擴展了這個方法。并且以2種形式表現(xiàn),一種是面向?qū)ο蟮模环N是以"mysqli_"開頭的過程函數(shù)。
以下介紹的將分為面向?qū)ο笠约斑^程方法來描述。

建立一個連接

面向?qū)ο蟮倪B接
我們可以用以下語句來建立MySQL的連接
1 ? @? $db = new ?mysqli( ' localhost ' , ' root ' , ' pwd ' , ' mysql ' );
簡單描述以下,這里建立一個mysqli的類,它傳入mysql所在的主機名,然后是用戶名,用戶密碼,以及訪問的數(shù)據(jù)庫。

過程方法的連接
上面對應(yīng)的過程方法是
?@? $db = mysqli_connect ( ' localhost ' , ' root ' , ' pwd ' , ' mysql ' );
此函數(shù)返回的不是一個對象,而是一個連接數(shù)據(jù)的資源。如果你使用過程方法,必須將資源傳遞到mysqli的所有其他函數(shù)。
在這里需要說明的是mysqli的大多數(shù)過程函數(shù)都有一個對應(yīng)的面向接口。通常情況下,過程函數(shù)都是以mysqli_開始的,同時需要傳入 mysqli_connect 返回的數(shù)據(jù)庫連接資源。
嘗試連接的結(jié)果需要檢查,萬一不成功也好做出相應(yīng)的處理呀。對于此,可以實用mysqli_connect_errno()來處理。
代碼可以如下
<? php
?@?
$db = new ?mysqli ( ' localhost ' , ' root ' , ' password ' , ' mysql ' );
?
if ( mysqli_connect_errno ())
?{
??????
echo ? ' Error:?Can?not?connect?to?database. ' ;
??}
??
else
??{
??????
echo ? ' Connect?to?database?OK ' ;
??}
??
?> ?
或者
?1 ? <? php
?2 ? ?@? $db = mysqli_connect ( ' localhost ' , ' root ' , ' password ' , ' mysql ' );
?3 ? ? if ( mysqli_connect_errno ())
?4 ? ?{
?5 ? ?????? echo ? ' Error:?Can?not?connect?to?database. ' ;
?6 ? ??}
?7 ? ?? else
?8 ? ??{
?9 ? ?????? echo ? ' Connect?to?database?OK ' ;
10 ? ??}
11 ? ??
12 ? ?> ?
mysqli_connect_errno()將返回一個連接數(shù)據(jù)庫出現(xiàn)的錯誤代碼,如果連接成功,返回0.

選擇使用的數(shù)據(jù)庫

在SQL里面,我們可以使用如下SQL來選擇數(shù)據(jù)庫
use ?mysql
那么在PHP里呢?我們可以使用如下代碼:
1 ? $db -> select_db(dbname) // dbname為你選擇的數(shù)據(jù)庫
或者
1 ? mysqli_select_db(db_resource,dbname) // db_resource就是前面提到的數(shù)據(jù)庫的連接資源

執(zhí)行SQL語句

要查詢數(shù)據(jù)庫,我們可以使用mysql_query()函數(shù),在進行此操作前最好把你的sql建立以下,例如
$query = " select ? * ? from ?bookmark where bm_url like ? ' abc ' ";
需要說明的一點是,這里不需要在SQL語句后加一個分號,這和在MySQL監(jiān)視器里是不一樣的。
現(xiàn)在我們可以調(diào)用以下的方式來執(zhí)行SQL語句。
$result = $db -> query($query)
以上是面向?qū)ο蟮姆椒ǎ^程方法可以為:
$result = mysqli_qurey($db,$query)
面向?qū)ο蟀姹痉祷匾粋€結(jié)果對象,過程版本返回一個資源。無論何種方法,都會降結(jié)果保存在一個變量里($result)中,這個函數(shù)執(zhí)行失敗,將返回false。Ok,給個實例吧。
?1 ? < ?php
?2 ? $db? = ?new?mysqli("localhost",?"bm_user",?"password",?"bookmarks");
?3 ?
?4 ? /* ?check?connection? */
?5 ? if ?(mysqli_connect_errno())?{
?6 ? ???printf("Connect?failed:? % s\n",?mysqli_connect_error());
?7 ? ??? exit ();
?8 ? }
?9 ?
10 ?
11 ? /* ?Create?table?doesn't?return?a?resultset? */
12 ? if ?($db -> query(" CREATE ? TEMPORARY ? TABLE ?mybookmark? LIKE ?bookmark")? === ?TRUE)?{
13 ? ???printf(" Table ?mybookmark?successfully?created.\n");
14 ? }
15 ? else
16 ? {
17 ? ????echo? ' error<br> ' ;
18 ? }
19 ?
20 ? $sql = " select ? * ? from ?bookmark?limit? 10 ";
21 ? /* ?Select?queries?return?a?resultset? */
22 ? if ?($result? = ?$db -> query($sql))?{
23 ? ???printf(" Select ?returned? % d?rows.\n",?$result -> num_rows);
24 ?
25 ? ??? /* ?free?result?set? */
26 ? ???$result -> close ();
27 ? }
28 ?
29 ? if ?($result? = ?$db -> query(" SELECT ? * ? FROM ?mybookmark",?MYSQLI_USE_RESULT))?{
30 ?
31 ? ??? if ?($db -> query(" SET ? @a : = ' this?will?not?work ' "))?{
32 ? ???????printf("Error:? % s\n",?$db -> error);
33 ? ???}
34 ? ???$result -> close ();
35 ? }
36 ?
37 ? $db -> close ();
38 ? ? > ?
39 ? ??
40 ?
或者

< ?php
$db?
= ?mysqli_connect("localhost",?"bm_user",?"password",?"bookmarks");

/* ?check?connection? */
if ?(mysqli_connect_errno())?{
???printf("Connect?failed:?
% s\n",?mysqli_connect_error());
???
exit ();
}


/* ?Create?table?doesn't?return?a?resultset? */
if ?(mysqli_query($db," CREATE ? TEMPORARY ? TABLE ?mybookmark? LIKE ?bookmark")? === ?TRUE)?{
???printf("
Table ?mybookmark?successfully?created.\n");
}
else
{
????echo?
' error<br> ' ;
}

$sql
= " select ? * ? from ?bookmark?limit? 10 ";
/* ?Select?queries?return?a?resultset? */
if ?($result? = ?mysqli_query($db,$sql))?{
???printf("
Select ?returned? % d?rows.\n",?$result -> num_rows);

???
/* ?free?result?set? */
????mysqli_free_result($result);
}

if ?($result? = ?mysqli_query($db," SELECT ? * ? FROM ?mybookmark",?MYSQLI_USE_RESULT))?{

???
if ?(mysqli_query($db," SET ? @a : = ' this?will?not?work ' "))?{
???????printf("Error:?
% s\n",?$db -> error);
???}
???mysqli_free_result($result);
}

mysqli_close($db);
?
> ?
??
簡單吧。

對查詢結(jié)果的處理
首先確定結(jié)果集的行數(shù)。我們可以利用下面的代碼實現(xiàn)它。
$num_rows = $result -> num_rows;

$num_rows = mysqli_num_rows($result)
得到了結(jié)果的行數(shù)之后,我們就可以處理每個結(jié)果了。例如可以有以下代碼:
1 ? for ( $index = 0 ; $index < num_rows; $index ++ )
2 ? {
3 ? ?? // Your?code?here?to?handle?each?record.
4 ? ??
5 ? }
為了得到每一行,我們可以調(diào)用$result->fetch_assoc()函數(shù)或者mysqli_fetch_assoc().如果函數(shù)沒有返回行,循環(huán)將會停止執(zhí)行。可以為:
$row = $result -> fetch_assoc()

$row = mysqli_fetch_assoc ( $result )
來實現(xiàn),如果你曾經(jīng)在VC里用ODBC操作數(shù)據(jù)庫的話,你會發(fā)現(xiàn)有些類似。
那么,我想得到每一列值怎么辦呢?很簡單,調(diào)用
$row [ ' bm_url ' ]
字符串'bm_url'就是列名。
除了上面的方法還有沒有其他方法得到每一行呢?還有2種方法:
1) 獲取每一行的枚舉數(shù)組
??? 可以為??
$row = $result -> fetch_row()
? 或??
$row = mysqli_fetch_row ( $result )
屬性值就是每個數(shù)組值,例如$row[0],$row[1]等。

2) 還有一種方法就是將每行返回到一個對象里。
? 可以為
? ?? $row = $result -> fetch_object()
??
或??
$row = mysqli_fetch_object ( $result )
如果訪問個列值,實用$row->username,$row->bm_url
??
斷開數(shù)據(jù)庫連接
在前面已經(jīng)見到了,
結(jié)果集的釋放:
$result -> free() .
或者
mysqli_free_result ( $result )
.
數(shù)據(jù)庫的關(guān)閉:
$db -> close()
或者
mysql_close ( $db )

使用Prepared語句
?這個功能有點類似.net SqlParameter.
?先舉個例子
1 ? $insertSql = " Insert?into?bookmark?values(?,?) " ;
2 ? ? $stmt = $db -> prepare( $insertSql );
3 ? ? $stmt -> bind_param( $username , $bookmark_url );
4 ? ? $stmt -> execute();
5 ? ? echo ? $stmt -> affected_rows . ' ?bookmarks?inserted?into?database. ' ;
6 ? ? $stmt -> close();
解釋一下。
line 1,需要注意的是2個問號。表示每個數(shù)據(jù)的位置。在C#里確實@+列名。
line 2:調(diào)用 $db -> prepare()構(gòu)建一個需要處理的資源,過程函數(shù)是mysqli_stmt_prepare().
line 3:調(diào)用
stmt -> bind_param將相應(yīng)的值綁定到相應(yīng)的位置上。過程函數(shù)是mysqli_stmt_bind_param.
line 4:執(zhí)行語句。
需要注意的是,在PHP5RC2版本里,Windows下執(zhí)行有時會crash掉,但在unix下卻運行正常。

PHP 16: MySql的數(shù)據(jù)庫訪問


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品国产99 | 日韩综合一区二区 | 狠狠躁夜夜躁人人爽天天高潮 | 精品中文字幕一区 | 日日操夜夜操视频 | 日韩在线精品 | 欧美日韩精品一区二区三区 | 天天躁夜夜躁狠狠躁2024 | 精品国产乱码久久久久久88av | 国产91在线视频 | 日本黄色激情视频 | 人人人人干| 欧美精品免费看 | 欧美一级www片免费观看 | 国产精品视频免费播放 | 中文字幕日本电影 | 欧美性免费视频 | 欧美一区二区三区免费高 | 久久99精品久久久久久噜噜 | 影音av| 亚洲一区二区三区免费在线观看 | 王的女人印度剧电视剧免费观看32集 | 中国一级免费视频 | av资源首页 | 波多野结衣三级在线观看 | yw在线播放 | 欧美日韩一区二区在线视频 | 国产精品视频一区二区三区不卡 | 婷婷久久五月天 | 亚洲AV国产成人精品区三上 | 国产精品久久久久无码AV1 | 精品国内在线视频2019百度 | 在线欧美 | 国产成人小视频在线观看 | 欧美亚洲日本国产 | 免费精品| 久久久一区二区 | aⅴ色国产 欧美 | 天天操伊人 | 亚洲成人国产综合 | 欧美久久久久 |