文章目錄
一、什麼是PHP預處理語句?
預處理語句用於執行多個相同的 SQL 語句,並且執行效率更高。首先對語句進行編譯,爲執行作好準備。接下來,在以後使用初始化函數返回的語句句柄(除去可變的數據部分)執行一次或多次。
對於多次執行的語句,預處理執行比直接執行快,主要原因在於,僅對查詢進行一次編譯操作。在直接執行的情況下,每次執行語句時,均將進行編譯。此外,由於每次執行預處理語句時僅需發送參數的數據,從而減少了網絡通信量。
預處理語句包括prepare()和execute()兩個方法。首先,通過prepare()方法做查詢的準備工作,然後,通過execute()方法執行查詢。並且還可以通過bindParam()方法來綁定參數提供給execute()方法。其語法如下:
PDOStatement PDO::prepare ( string statement [, array driver_options] )
bool PDOStatement::execute ( [array input_parameters] )
二、獲取預處理器結果集的方式
2.1、 fetch()方法
2.2、 fetchAll()方法
2.3、 fetchColumn()方法
2.1 fetch()方法
fetch()方法獲取結果集中的下一行,其語法格式如下:
mixed PDOStatement::fetch ( [int fetch_style [, int cursor_orientation [, int cursor_offset]]] )
fetch_style控制結果集的可選值
參數cursor_orientation:PDOStatement對象的一個滾動遊標,可用於獲取指定的一行。
參數cursor_offset:遊標的偏移量。
實例 fetch:
數據庫截圖:
php:
<body>
<table id="__01" width='464' border="0" cellpadding='0' cellspacing='0'>
<tr>
<td colspan="3">
<img src="images/mysql_01.gif" width="464" height="139" alt="">
</td>
</tr>
<tr>
<td>
<img src="images/mysql_02.gif" width="78" height="136" alt="">
</td>
<td width='312' height='136' valign='top'>
<table width='310' border="0" cellpadding='0' cellspacing='0'>
<tr>
<td height='30' align="center"><strong>ID</strong></td>
<td align="center"><strong>PDO</strong></td>
<td align="center"><strong>數據庫</strong></td>
<td align="center"><strong>時間</strong></td>
</tr>
<?php
$dbms='mysql'; //數據庫類型
$host='localhost'; //數據庫主機名
$dbName='db_database17';//使用的數據庫名稱
$user='root';
$pass='123456';
//數據庫類型 數據庫主機名 數據庫名稱
// $dsn = ' "$dbms":host="$host";dbname"$dbName" ';
$dsn="$dbms:dbname=$dbName;host=$host";
try {
$pdo = new PDO($dsn,$user,$pass);
$query = "select * from tb_pdo_mysql";
$result = $pdo->prepare($query);//準備查詢語句
$result->execute();//執行查詢語句,並返回結果集
//這裏使用的是fetch的第一種方法 PDO::FETCH_ASSOC ,關聯數組形式
//也就是說取出來的值我們需要使用與數據庫對應的字段名來獲取數據
while($res=$result->fetch(PDO::FETCH_ASSOC)){
?>
<tr>
<td height='22' align='center' valign='middle'><?php echo $res['id'];?></td>
<td align="center" valign='middle'><?php echo $res['pdo_type'];?></td>
<td align="center" valign='middle'><?php echo $res['database_name'];?></td>
<td align="center" valign='middle'><?php echo $res['dates'];?></td>
</tr>
<?php
}
} catch (PDOException $e) {
die("Error:".$e->getMessage()."<br>");
}
?>
</table>
</td>
<td><img src="images/mysql_04.jpg" width="74" height="136" alt=""></td>
</tr>
<tr>
<td colspan="3">
<img src="images/mysql_05.gif" width="464" height="61" alt="">
</td>
</tr>
</table>
</body>
結果:
由於技術原因,代碼裏邊所引用的圖片這裏就沒有提供了,如果有需要可以評論或私信筆者,筆者都會仔細觀看的。
2.2 fetchAll() 方法
fetchAll()方法獲取結果集中的所有行
調用PDO結果集的fetchAll() 方法 的返回值是一個二維數組。
我們需要使用for循環+字段名的方式取出數據庫裏邊的值。
如果此處的 fetch_style是 PDO::FETCH_NUM 那麼可以使用雙重循環輸出
實例 fetchAll:
<?php
$dbms='mysql'; //數據庫類型
$host='localhost'; //數據庫主機名
$dbName='db_database17';//使用的數據庫名稱
$user='root';
$pass='123456';
$dsn="$dbms:dbname=$dbName;host=$host";
try {
$pdo = new PDO($dsn,$user,$pass);
$query = "select * from tb_pdo_mysql";
$result = $pdo->prepare($query);//準備查詢語句
$result->execute();//執行查詢語句,並返回結果集
//此處已經返回了表裏的所有數據,並且是二維數組,我們使用for循環輸出
$res=$result->fetchAll(PDO::FETCH_ASSOC);
for($i=0;$i<count($res);$i++){
?>
<tr>
<td height="22" align="center" valign="middle"><?php echo $res[$i]['id'];?></td>
<td height="22" align="center" valign="middle"><?php echo $res[$i]['pdo_type'];?></td>
<td height="22" align="center" valign="middle"><?php echo $res[$i]['database_name'];?></td>
<td height="22" align="center" valign="middle"><?php echo $res[$i]['dates'];?></td>
<td align='center'><a href="#">刪除</a></td>
</tr>
<?php
}
} catch (PDOException $e) {
die("Error:".$e->getMessage()."<br>");
}
?>
效果:
2.3 fetchColumn() 方法
fetchColumn()方法獲取結果集中下一行指定列的值(也就是指定的單元格),
其語法如下:
string PDOStatement::fetchColumn ( [int column_number] )
可選參數column_number設置行中列的索引值,該值從0開始。如果省略該參數則將從開始列取值。
實例 fetchColumn:
<?php
$dbms='mysql'; //數據庫類型
$host='localhost'; //數據庫主機名
$dbName='db_database17';//使用的數據庫名稱
$user='root';
$pass='123456';
$dsn="$dbms:dbname=$dbName;host=$host";
try {
$pdo = new PDO($dsn,$user,$pass);
$query = "select * from tb_pdo_mysql";
$result = $pdo->prepare($query);//準備查詢語句
$result->execute();//執行查詢語句,並返回結果集
//查詢到一條輸出一條
while($res = $result->fetchColumn(0)){
?>
<tr>
<td height='22' align='center' valign='middle'><?php echo $res ?></td>
</tr>
<?php
}
} catch (PDOException $e) {
die("Error:".$e->getMessage()."<br>");
}
?>
效果: