亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

PHP 16: MySql的數據庫訪問

系統 1830 0
原文: PHP 16: MySql的數據庫訪問

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

  • 如何連接到數據庫
  • 如何執行SQL
  • 如何返回數據結果集
  • 如何從結果集取出數據
  • 關閉連接
?以上就是數據庫的常規操作。
對于MySQL而言,由于其版本不同,訪問數據庫的方法也不同。PHP4有個MySQL一般的訪問方法,過程都是以"mysql_"為前綴的。當到了PHP5,除了它,還擴展了這個方法。并且以2種形式表現,一種是面向對象的,一種是以"mysqli_"開頭的過程函數。
以下介紹的將分為面向對象以及過程方法來描述。

建立一個連接

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

過程方法的連接
上面對應的過程方法是
?@? $db = mysqli_connect ( ' localhost ' , ' root ' , ' pwd ' , ' mysql ' );
此函數返回的不是一個對象,而是一個連接數據的資源。如果你使用過程方法,必須將資源傳遞到mysqli的所有其他函數。
在這里需要說明的是mysqli的大多數過程函數都有一個對應的面向接口。通常情況下,過程函數都是以mysqli_開始的,同時需要傳入 mysqli_connect 返回的數據庫連接資源。
嘗試連接的結果需要檢查,萬一不成功也好做出相應的處理呀。對于此,可以實用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()將返回一個連接數據庫出現的錯誤代碼,如果連接成功,返回0.

選擇使用的數據庫

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

執行SQL語句

要查詢數據庫,我們可以使用mysql_query()函數,在進行此操作前最好把你的sql建立以下,例如
$query = " select ? * ? from ?bookmark where bm_url like ? ' abc ' ";
需要說明的一點是,這里不需要在SQL語句后加一個分號,這和在MySQL監視器里是不一樣的。
現在我們可以調用以下的方式來執行SQL語句。
$result = $db -> query($query)
以上是面向對象的方法,過程方法可以為:
$result = mysqli_qurey($db,$query)
面向對象版本返回一個結果對象,過程版本返回一個資源。無論何種方法,都會降結果保存在一個變量里($result)中,這個函數執行失敗,將返回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);
?
> ?
??
簡單吧。

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

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

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

2) 還有一種方法就是將每行返回到一個對象里。
? 可以為
? ?? $row = $result -> fetch_object()
??
或??
$row = mysqli_fetch_object ( $result )
如果訪問個列值,實用$row->username,$row->bm_url
??
斷開數據庫連接
在前面已經見到了,
結果集的釋放:
$result -> free() .
或者
mysqli_free_result ( $result )
.
數據庫的關閉:
$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個問號。表示每個數據的位置。在C#里確實@+列名。
line 2:調用 $db -> prepare()構建一個需要處理的資源,過程函數是mysqli_stmt_prepare().
line 3:調用
stmt -> bind_param將相應的值綁定到相應的位置上。過程函數是mysqli_stmt_bind_param.
line 4:執行語句。
需要注意的是,在PHP5RC2版本里,Windows下執行有時會crash掉,但在unix下卻運行正常。

PHP 16: MySql的數據庫訪問


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 在线播放国产区 | 伊人首页 | 全免费午夜一级毛片一级毛 | 日韩中文字幕在线不卡 | 国产精品成人观看视频国产 | 日日摸狠狠的摸夜夜摸 | 天天操天天操天天操天天操 | er久99久热只有精品国产 | 久久美利坚 | 中文字幕在线一区二区在线 | 欧美色亚洲图 | 国产精品视频一区二区三区不卡 | 图片专区亚洲欧美另类 | 9热在线精品视频观看 | 中文字幕在线观看一区 | 成人精品综合免费视频 | 四虎.com| a免费网站| 毛片在线不卡 | 国产一区亚洲一区 | 99视频精品全国免费 | 久久99久久99精品免观看动漫 | 四虎影视紧急入口地址大全 | 九九视频国产 | 青青草国产免费一区二区 | 中文精品久久久久国产不卡 | 一区二区三区无码高清视频 | 久久有这有精品在线观看 | 日韩国产欧美成人一区二区影院 | jzz欧美| 久久综合精品国产一区二区三区 | 国产精品视频全国免费观看 | 国产精品麻豆 | 国模私拍视频在线 | a一级毛片免费播放 | 亚洲第一成人在线 | 免费一区二区三区四区五区 | 久久久精品久久久久久 | 日本道在线视频 | 在线观看国产一区 | 婷婷激情在线 |