php資料庫訪問

來源:互聯網
上載者:User

標籤:

計應134(實驗班)詹加全

對於資料庫的操作,無非就是以下幾個點:

  • 如何串連到資料庫
  • 如何執行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資料庫訪問

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.