欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PDO預(yù)處理語(yǔ)句PDOStatement對(duì)象使用總結(jié)

 更新時(shí)間:2014年11月20日 09:18:15   投稿:junjie  
這篇文章主要介紹了PDO預(yù)處理語(yǔ)句PDOStatement對(duì)象使用總結(jié),本文介紹了PDOStatement的方法及常用方法的使用例子,需要的朋友可以參考下

PDO對(duì)預(yù)處理語(yǔ)句的支持需要使用PDOStatement類對(duì)象,但該類對(duì)象并不是通過NEW關(guān)鍵字實(shí)例化出來的,而是通過PDO對(duì)象中的prepare()方法,在數(shù)據(jù)庫(kù)服務(wù)器中準(zhǔn)備好一個(gè)預(yù)處理的SQL語(yǔ)句后直接返回的。如果通過之前執(zhí)行PDO對(duì)象中的query()方法返回的PDOStatement類對(duì)象,只代表的是一個(gè)結(jié)果集對(duì)象。而如果通過執(zhí)行PDO對(duì)象中的prepare()方法產(chǎn)生的PDOStatement類對(duì)象,則為一個(gè)查詢對(duì)象,能定義和執(zhí)行參數(shù)化的SQL命令。PDOStatement類中的全部成員方法如下所示:

復(fù)制代碼 代碼如下:

PDOStatement::bindColumn — 綁定一列到一個(gè) PHP 變量
PDOStatement::bindParam — 綁定一個(gè)參數(shù)到指定的變量名
PDOStatement::bindValue — 把一個(gè)值綁定到一個(gè)參數(shù)
PDOStatement::closeCursor — 關(guān)閉游標(biāo),使語(yǔ)句能再次被執(zhí)行。
PDOStatement::columnCount — 返回結(jié)果集中的列數(shù)
PDOStatement::debugDumpParams — 打印一條 SQL 預(yù)處理命令
PDOStatement::errorCode — 獲取跟上一次語(yǔ)句句柄操作相關(guān)的 SQLSTATE
PDOStatement::errorInfo — 獲取跟上一次語(yǔ)句句柄操作相關(guān)的擴(kuò)展錯(cuò)誤信息
PDOStatement::execute — 執(zhí)行一條預(yù)處理語(yǔ)句
PDOStatement::fetch — 從結(jié)果集中獲取下一行
PDOStatement::fetchAll — 返回一個(gè)包含結(jié)果集中所有行的數(shù)組
PDOStatement::fetchColumn — 從結(jié)果集中的下一行返回單獨(dú)的一列。
PDOStatement::fetchObject — 獲取下一行并作為一個(gè)對(duì)象返回。
PDOStatement::getAttribute — 檢索一個(gè)語(yǔ)句屬性
PDOStatement::getColumnMeta — 返回結(jié)果集中一列的元數(shù)據(jù)
PDOStatement::nextRowset — 在一個(gè)多行集語(yǔ)句句柄中推進(jìn)到下一個(gè)行集
PDOStatement::rowCount — 返回受上一個(gè) SQL 語(yǔ)句影響的行數(shù)
PDOStatement::setAttribute — 設(shè)置一個(gè)語(yǔ)句屬性
PDOStatement::setFetchMode — 為語(yǔ)句設(shè)置默認(rèn)的獲取模式。

1、準(zhǔn)備語(yǔ)句

重復(fù)執(zhí)行一個(gè)SQL查詢,通過每次迭代使用不同的參數(shù),這種情況使用預(yù)處理語(yǔ)句運(yùn)行效率最高。使用預(yù)處理語(yǔ)句,首先需要在數(shù)據(jù)庫(kù)服務(wù)器中先準(zhǔn)備好“一個(gè)SQL語(yǔ)句”,但并不需要馬上執(zhí)行。PDO支持使用“占位符”語(yǔ)法,將變量綁定到這個(gè)預(yù)處理的SQL語(yǔ)句中。對(duì)于一個(gè)準(zhǔn)備好的SQL語(yǔ)句,如果在每次執(zhí)行時(shí)都要改變一些列值,這種情況必須使用“占位符號(hào)”而不是具體的列值。在PDO中有兩種使用占位符的語(yǔ)法:“命名參數(shù)”和“問號(hào)參數(shù)”,使用哪一種語(yǔ)法要看個(gè)人的喜好。

使用命名參數(shù)作為占位符的INSERT插入語(yǔ)句:

復(fù)制代碼 代碼如下:

$dbh->prepare(“insert into contactinfo(name,address,phone) values(:name,:address,:phone)”);

需要自定義一個(gè)字符串作為“命名參數(shù)”,每個(gè)命名參數(shù)需要冒號(hào)(:)開始,參數(shù)的命名一定要有意義,最好和對(duì)應(yīng)的字段名稱相同。
使用問號(hào)(?)參數(shù)作為占位符的INSERT插入語(yǔ)句:
復(fù)制代碼 代碼如下:

$dbh->prepare(“insert into contactinfo(name,address,phone) values(?,?,?)”);

問號(hào)參數(shù)一定要和字段的位置順序?qū)?yīng)。不管是使用哪一種參數(shù)作為占位符構(gòu)成的查詢,或是語(yǔ)句中沒有用到占位符,都需要使用PDO對(duì)象中的prepare()方法,去準(zhǔn)備這個(gè)將要用于迭代執(zhí)行的查詢,并返回PDOStatement類對(duì)象。

2、綁定參數(shù)

當(dāng)SQL語(yǔ)句通過PDO對(duì)象中的prepare()方法在數(shù)據(jù)庫(kù)服務(wù)器端準(zhǔn)備好了以后,如果使用了占位符,就需要在每次執(zhí)行時(shí)替換輸入的參數(shù)??梢酝ㄟ^PDOStatement對(duì)象中的bindParam()方法,把參數(shù)變量綁定到準(zhǔn)備好的占位符上(位置或名字要對(duì)應(yīng))。方法bindParame()的原型如下所示:

復(fù)制代碼 代碼如下:

bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )

第一個(gè)參數(shù)parameter是必選項(xiàng),如果在準(zhǔn)備好的查詢中占位符語(yǔ)法使用名字參數(shù),那么將名字參數(shù)字符串作為bindParam()方法的第一個(gè)參數(shù)提供。如果占位符語(yǔ)法使用問號(hào)參數(shù),那么將準(zhǔn)備好的查詢中列值占位符的索引偏移量,作為該方法的第一個(gè)參數(shù)。

第二個(gè)參數(shù)variable也是可選項(xiàng),提供供給第一個(gè)參數(shù)所指定占位符的值。因?yàn)樵搮?shù)是按引用傳遞的,所以只能提供變量作為參數(shù),不能直接提供數(shù)值。

第三個(gè)參數(shù)data_type是可選項(xiàng),為當(dāng)前被綁定的參數(shù)設(shè)置數(shù)據(jù)類型??梢詾橐韵轮怠?/p>

PDO::PARAM_BOOL 代表boolean數(shù)據(jù)類型。
PDO::PARAM_NULL 代表SQL中的NULL類型。
PDO::PARAM_INT 代表SQL中的INTEGER數(shù)據(jù)類型。
PDO::PARAM_STR 代表SQL中的CHAR、VARCHAR和其他字符串?dāng)?shù)據(jù)類型。
PDO::PARAM_LOB 代表SQL中大對(duì)象數(shù)據(jù)類型。

第四個(gè)參數(shù)length是可選項(xiàng),用于指定數(shù)據(jù)類型的長(zhǎng)度。

第五個(gè)參數(shù)driver_options是可選項(xiàng),通過該參數(shù)提供任何數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序特定的選項(xiàng)。
使用命名參數(shù)作為占位符的參數(shù)綁定示例:

復(fù)制代碼 代碼如下:

<?php
//...省略PDO連接數(shù)據(jù)庫(kù)代碼
$query = "insert into contactinfo (name,address,phone) values(:name,:address,:phone)";
$stmt = $dbh->prepare($query);          //調(diào)用PDO對(duì)象中的prepare()方法
 
$stmt->blinparam(':name',$name);        //將變量$name的引用綁定到準(zhǔn)備好的查詢名字參數(shù)":name"中
$stmt->blinparam(':address',$address);
$stmt->blinparam(':phone',phone);
//...
?>

使用問號(hào)(?)作為占位符的參數(shù)綁定示例:

復(fù)制代碼 代碼如下:

<?php
//...省略PDO連接數(shù)據(jù)庫(kù)代碼
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query);          //調(diào)用PDO對(duì)象中的prepare()方法
 
$stmt->blinparam(1,$name,PDO::PARAM_STR);        //將變量$name的引用綁定到準(zhǔn)備好的查詢名字參數(shù)":name"中
$stmt->blinparam(2,$address,PDO::PARAM_STR);
$stmt->blinparam(3,phone,PDO::PARAM_STR,20);
//...
?>

3、執(zhí)行準(zhǔn)備語(yǔ)句

當(dāng)準(zhǔn)備語(yǔ)句完成,并綁定了相應(yīng)的參數(shù)后,就可以通過調(diào)用PDOStatement類對(duì)象中的execute()方法,反復(fù)執(zhí)行在數(shù)據(jù)庫(kù)緩存區(qū)準(zhǔn)備好的語(yǔ)句了。在下面的示例中,向前面提供的contactinfo表中,使用預(yù)處理方式連續(xù)執(zhí)行同一個(gè)INSERT語(yǔ)句,通過改變不同的參數(shù)添加兩條記錄。如下所示:

復(fù)制代碼 代碼如下:

<?php
try {
     $dbh = new PDO('mysql:dbname=testdb;host=localhost', $username, $passwd);
}catch (PDOException $e){
    echo '數(shù)據(jù)庫(kù)連接失?。?.$e->getMessage();
    exit;
}
 
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query);
 
$stmt->blinparam(1,$name);     
$stmt->blinparam(2,$address);
$stmt->blinparam(3,phone);
 
$name = "趙某某";
$address = "海淀區(qū)中關(guān)村";
$phone = "15801688348";
 
$stmt->execute();           //執(zhí)行參數(shù)被綁定后的準(zhǔn)備語(yǔ)句
?>

如果你只是要傳遞輸入?yún)?shù),并且有許多這樣的參數(shù)要傳遞,那么你會(huì)覺得下面所示的快捷方式語(yǔ)法非常有幫助。是通過在execute()方法中提供一個(gè)可選參數(shù),該參數(shù)是由準(zhǔn)備查詢中的命名參數(shù)占位符組成的數(shù)組,這是第二種為預(yù)處理查詢?cè)趫?zhí)行中替換輸入?yún)?shù)的方式。此語(yǔ)法使你能夠省去對(duì)$stmt->bindParam()的調(diào)用。將上面的示例做如下修改:
復(fù)制代碼 代碼如下:

<?php
//...省略PDO連接數(shù)據(jù)庫(kù)代碼
$query = "insert into contactinfo (name,address,phone) values(?,?,?)";
$stmt = $dbh->prepare($query);
 
//傳遞一個(gè)數(shù)組為預(yù)處理查詢中的命名參數(shù)綁定值,并執(zhí)行一次。
$stmt->execute(array("趙某某","海淀區(qū)","15801688348"));
?>

另外,如果執(zhí)行的是INSERT語(yǔ)句,并且數(shù)據(jù)表中有自動(dòng)增長(zhǎng)的ID字段,可以使用PDO對(duì)象中的lastinsertId()方法獲取最后插入數(shù)據(jù)表中的記錄ID。如果需要查看其他DML語(yǔ)句是否執(zhí)行成功,可以通過PDOStatement類對(duì)象中的rowCount()方法獲取影響記錄的行數(shù)。

相關(guān)文章

最新評(píng)論