1. 建立數據庫連接
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","root","","mydb");
?>
建立一個數據庫連接需要四個參數,分別為數據庫地址、數據庫訪問用戶名、數據庫訪問密碼、數據庫名稱。除了使用上面的mysqli對象的構造方法建立數據庫連接外,還可以調用其connect方法建立數據庫的連接。
復制代碼 代碼如下:
<?php
$mysqli = new mysqli();
$mysqli->connect("localhost","root","","mydb");
?>
還可以通過mysqli對象的構造方法建立數據連接,通過select_db方法指定要訪問的數據庫。
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
?>
通過mysqli對象的errno屬性獲取當前連接的錯誤號,如果當前連接沒有任何錯誤,錯誤號返回為0。
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判斷當前連接是否成功
{
}
else
{
echo "The Connection is Error!";
exit();
}
?>
當然可以通過mysqli對象的error屬性獲取當前連接的錯誤信息,如果沒有錯誤,返回“”。
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","rootsss","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判斷當前連接是否成功
{
}
else
{
echo $mysqli->error; //輸出當前錯誤信息
exit();
}
?>
2.查詢數據庫
查詢數據庫可以使用mysqli對象的query方法,該方法返回查詢數據庫的結果集。
語法為:$mysqli->query(查詢語句,查詢模式);
查詢模式有兩種:
① MYSQLI_STORE_RESULT。將結果作為一個緩存集進行返回,這說明可以立即對整個結果集進行導航。該設置為默認設置。結果集查詢出來後就放入內存中,這就代表如果結果集內數據量很大則會占用較多的內存。但是利用這種方式我們可以很容易知道一個查詢返回了多少行記錄或希望立即跳到結果集的某一行。
② MYSQLI_USE_RESULT。將結果集作為一個非緩存集返回。這就代表會根據需要從數據庫服務器獲取結果集,對於較大的結果集數據這樣做可以提高性能。但是會導致很多對結果集的操作受到限制,比如獲取查詢行數等。
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判斷當前連接是否成功
{
$sql = "SELECT * FROM student";
$result = $mysqli->query($sql);
echo "Result row nums:".$result->num_rows."<br>"; //顯示結果集數量
//迭代結果集
while(list($id,$name,$age,$address) = $result->fetch_row())
{
echo "$id : $name : $age : $address"."<br>";
}
}
else
{
echo $mysqli->error; //輸出當前錯誤信息
exit();
}
?>
使用結果集對象的fetch_row方法獲取結果集中每一行數據,每一行數據為一個關聯數組,並使用list方法將其中的每個數據進行輸出。還可以使用輸出對象的方式將結果集中的每一行進行輸出。
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判斷當前連接是否成功
{
$sql = "SELECT * FROM student";
$result = $mysqli->query($sql);
echo "Result row nums:".$result->num_rows."<br>"; //顯示結果集數量
//迭代結果集
while($rowObject = $result->fetch_object())
{
echo "$rowObject->id : $rowObject->name : $rowObject->age : $rowObject->address"."<br>";
}
}
else
{
echo $mysqli->error; //輸出當前錯誤信息
exit();
}
?>
其中使用fetch_object方法將每一行中的數據封裝為一個對象,在上面的例子中該對象為$rowObject,數據庫中每一列成為該對象的屬性,通過該對象調用其屬性名稱就可以獲取對應的字段值。比如獲取學生姓名$rowObject->name。
還可以使用fetch_array方法將每一行數據返回為一個關聯數組或是一個索引數組,或者同時返回關聯數組和索引數組。fetch_array方法的模式參數來指定當前返回數組的模式:
① MYSQLI_ASSOC。返回關聯數組,key為字段名,value為字段值。
② MYSQLI_NUM。返回索引數組,返回順序和查詢字段順序相同。
③ MYSQLI_BOTH。同時返回關聯數組和索引數組。默認設置。
復制代碼 代碼如下:
<?php
while($row = $result->fetch_array(MYSQLI_ASSOC)) //返回關聯數組
{
echo $row['id']. $row['name'].$row['age'].$row['address']."<br>";
}
?>
或
復制代碼 代碼如下:
<?php
while($row = $result->fetch_array(MYSQLI_NUM)) //返回索引數組
{
echo $row[0]. $row[1].$row[2].$row[3]."<br>";
}
?>
3.釋放內存
如果結果集中數據量巨大並且已經使用完畢後,結果集對象的free方法用於釋放結果集占用的內存。一旦調用了free方法,結果集將不再可用。
復制代碼 代碼如下:
<?php
...
$result->free(); //釋放內存
?>
4.添加、修改和刪除操作
使用mysqli對象的query方法依然可以進行對數據庫的添加、修改和刪除操作,只不過是SQL語句的不同而已。我們以添加數據為例:
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判斷當前連接是否成功
{
$sql = "INSERT INTO student(id,name,age,address) VALUES('8','kay','23','xian')";
$result = $mysqli->query($sql);
echo $mysqli->affected_rows; //輸出影響的行數
}
else
{
echo $mysqli->error; //輸出當前錯誤信息
exit();
}
?>
調用mysqli對象的affected_rows屬性可以獲取影響的行數。
5.關閉數據庫連接
當一個數據庫連接使用完畢後調用mysqli對象的close方法將其關閉。
復制代碼 代碼如下:
<?php
...
$mysqli->close();
?>
6.使用綁定參數
在PHP中的綁定參數和Java中的預處理SQL是相同的原理,當反復執行一個SQL時,SQL的參數不定時可以使用綁定參數方式可以提升SQL的執行速度.
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判斷當前連接是否成功
{
$sql = "INSERT INTO student(id,name,age,address) VALUES(?,?,?,?)";
$stmt = $mysqli->stmt_init(); //創建預處理對象
$stmt->prepare($sql); //對SQL進行預處理
$stmt->bind_param("isis",$id,$name,$age,$address); //設置綁定的變量 第一個參數為變量的數據類型
for($i = 12;$i<100;$i++)
{
$id = $i + 1;
$name = "樊凱";
$age = 23;
$address = "xian";
$stmt->execute(); //執行SQL語句
}
echo $mysqli->affected_rows; //輸出影響的行數
$stmt->close(); //釋放預處理對象占用的內存
$mysqli->close(); //關閉數據庫連接
}
else
{
echo $mysqli->error; //輸出當前錯誤信息
exit();
}
?>
需要注意的是bind_param方法的第一個參數,該參數指定了後面的變量的數據類型,這些數據類型如下所示:
① i : 所有的Integer類型。
② d : 所有的double和float類型。
③ b : Blob類型。
④ s : 其他數據類型包括字符串。
7.結果綁定
結果綁定用於將查詢結果和一些變量進行綁定。
復制代碼 代碼如下:
<?php
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判斷當前連接是否成功
{
$sql = "SELECT * FROM student";
$stmt = $mysqli->stmt_init(); //創建預處理對象
$stmt->prepare($sql); //對SQL進行預處理
$stmt->bind_result($id,$name,$age,$address); //將查詢結果字段綁定到變量中
$stmt->execute(); //執行SQL語句
while($stmt->fetch()) //fetch方法用於獲取結果集中的每一行,並將相應字段值賦給變量
{
echo "$id : $name : $age : $address"."<br>";
}
$stmt->close(); //釋放預處理對象占用的內存
$mysqli->close(); //關閉數據庫連接
}
else
{
echo $mysqli->error; //輸出當前錯誤信息
exit();
}
?>