亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PDO預處理語句PDOStatement對象使用總結

2024-05-04 23:27:41
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PDO預處理語句PDOStatement對象使用總結,本文介紹了PDOStatement的方法及常用方法的使用例子,需要的朋友可以參考下
 
 

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

 

復制代碼代碼如下:

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

 

1、準備語句

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

使用命名參數作為占位符的INSERT插入語句:

復制代碼代碼如下:

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

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

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

問號參數一定要和字段的位置順序對應。不管是使用哪一種參數作為占位符構成的查詢,或是語句中沒有用到占位符,都需要使用PDO對象中的prepare()方法,去準備這個將要用于迭代執行的查詢,并返回PDOStatement類對象。

 

2、綁定參數

當SQL語句通過PDO對象中的prepare()方法在數據庫服務器端準備好了以后,如果使用了占位符,就需要在每次執行時替換輸入的參數。可以通過PDOStatement對象中的bindParam()方法,把參數變量綁定到準備好的占位符上(位置或名字要對應)。方法bindParame()的原型如下所示:

復制代碼代碼如下:

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

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

 

第二個參數variable也是可選項,提供供給第一個參數所指定占位符的值。因為該參數是按引用傳遞的,所以只能提供變量作為參數,不能直接提供數值。

第三個參數data_type是可選項,為當前被綁定的參數設置數據類型。可以為以下值。

PDO::PARAM_BOOL 代表boolean數據類型。
PDO::PARAM_NULL 代表SQL中的NULL類型。
PDO::PARAM_INT 代表SQL中的INTEGER數據類型。
PDO::PARAM_STR 代表SQL中的CHAR、VARCHAR和其他字符串數據類型。
PDO::PARAM_LOB 代表SQL中大對象數據類型。

第四個參數length是可選項,用于指定數據類型的長度。

第五個參數driver_options是可選項,通過該參數提供任何數據庫驅動程序特定的選項。
使用命名參數作為占位符的參數綁定示例:

復制代碼代碼如下:

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

 

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

復制代碼代碼如下:

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

 

3、執行準備語句

當準備語句完成,并綁定了相應的參數后,就可以通過調用PDOStatement類對象中的execute()方法,反復執行在數據庫緩存區準備好的語句了。在下面的示例中,向前面提供的contactinfo表中,使用預處理方式連續執行同一個INSERT語句,通過改變不同的參數添加兩條記錄。如下所示:

復制代碼代碼如下:

<?php 
try {
     $dbh = new PDO('mysql:dbname=testdb;host=localhost', $username, $passwd);
}catch (PDOException $e){
    echo '數據庫連接失?。?#39;.$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 = "海淀區中關村";
$phone = "15801688348";
 
$stmt->execute();           //執行參數被綁定后的準備語句
?>

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

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

 

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久国产一区二区三区| 精品国产电影一区| 日韩一区二区在线视频| 亚洲黄色免费三级| 亚洲国产精品久久91精品| 欧美一级bbbbb性bbbb喷潮片| 成人在线视频网| 日本aⅴ大伊香蕉精品视频| 中文字幕精品在线视频| 欧美精品制服第一页| 久久久999精品视频| 91福利视频在线观看| 亚洲精品日韩在线| 中文字幕久久亚洲| 日韩毛片在线观看| 永久免费毛片在线播放不卡| 久久久精品国产网站| 日韩精品在线播放| 中文字幕亚洲第一| 久久影院中文字幕| 国产综合香蕉五月婷在线| 国产精品国产福利国产秒拍| 欧美激情欧美狂野欧美精品| 91精品国产色综合久久不卡98| 色爱av美腿丝袜综合粉嫩av| 欧美尤物巨大精品爽| 深夜精品寂寞黄网站在线观看| 欧洲亚洲在线视频| 久久99国产精品久久久久久久久| 欧美成人第一页| 国产精品视频一区二区高潮| 日韩精品视频在线| 欧美精品videosex牲欧美| 国产精品日韩专区| 成人国产精品一区二区| 欧美成人免费小视频| 情事1991在线| 国产精品成熟老女人| 日韩av电影免费观看高清| 国产精品夜色7777狼人| 久久久久久久久久久亚洲| 欧美精品aaa| 国产精品视频在线观看| 午夜精品久久久久久久99黑人| 91欧美视频网站| 欧美在线视频导航| 久久躁狠狠躁夜夜爽| 亚洲曰本av电影| 国产丝袜精品视频| 国产日韩中文在线| 亚洲一品av免费观看| 97视频网站入口| 亚洲精品小视频在线观看| 亚洲开心激情网| 欧美黑人xxxx| 5278欧美一区二区三区| 欧美激情一区二区久久久| 日韩精品视频免费专区在线播放| 亚洲成人激情在线观看| 久久久久久中文字幕| 国产精品久久久久av免费| 亚洲天堂开心观看| 日韩欧美aⅴ综合网站发布| 色悠久久久久综合先锋影音下载| 成人欧美一区二区三区黑人| 亚洲人成绝费网站色www| 久久精品久久久久久| 国产日韩在线一区| 午夜精品久久久久久久久久久久| 久久成人国产精品| 欧美午夜视频在线观看| 亚洲欧美日韩网| 国产欧美日韩综合精品| 尤物yw午夜国产精品视频| 日韩欧美亚洲范冰冰与中字| 懂色aⅴ精品一区二区三区蜜月| 亚洲精品久久久久久下一站| 亚洲男人av在线| 国产成人精品综合| 在线视频一区二区| xvideos国产精品| 久久久精品2019中文字幕神马| 久久久久久久久久久亚洲| 亚洲qvod图片区电影| 日韩中文字幕在线精品| 国产精品久久国产精品99gif| 日韩一区二区在线视频| 国产z一区二区三区| 成人国产精品久久久| 成人国产精品av| 亚洲另类图片色| 亚洲欧美日本精品| 久久这里只有精品99| 91在线中文字幕| 欧美色道久久88综合亚洲精品| 国产精品91免费在线| 午夜精品一区二区三区在线视频| 97在线精品国自产拍中文| 国产精品视频一区国模私拍| 在线看欧美日韩| 国产欧美日韩最新| 久久久久九九九九| 欧美高清视频在线观看| 国产精品美女主播| 日韩有码在线观看| 国产区精品在线观看| 国产午夜精品视频| 欧美自拍视频在线观看| 亚洲人成绝费网站色www| 亚洲精品小视频| 中文欧美日本在线资源| 亚洲人成自拍网站| 国产精品主播视频| 欧美激情精品久久久久久大尺度| 精品夜色国产国偷在线| 中文字幕综合在线| 欧美亚洲国产视频| 亚洲精品网址在线观看| 国产视频亚洲视频| 亚洲永久免费观看| 国产亚洲激情视频在线| 欧美视频中文字幕在线| 国产成人精品综合久久久| 亚洲free嫩bbb| 亚洲三级黄色在线观看| 久久久女女女女999久久| 久久久国产在线视频| 久久久久国产视频| 97视频在线观看免费高清完整版在线观看| 伊人久久久久久久久久| 一区二区三区美女xx视频| 亚洲aⅴ男人的天堂在线观看| 久久久久久久久久久免费精品| 久久精品99无色码中文字幕| 国产精品美女久久久免费| 亚洲电影中文字幕| 欧美日韩中国免费专区在线看| 18久久久久久| 亚洲欧美日韩区| 午夜精品蜜臀一区二区三区免费| 成人黄色网免费| 高清视频欧美一级| 97**国产露脸精品国产| 国产精品一二三视频| 亚洲va欧美va国产综合剧情| 搡老女人一区二区三区视频tv| 久久视频免费在线播放| 欧美在线精品免播放器视频| 精品亚洲aⅴ在线观看| 精品成人69xx.xyz| 成人深夜直播免费观看| 久久影视电视剧免费网站| 好吊成人免视频| 亚洲天堂av网| 欧美日韩美女视频| 中文字幕久久亚洲| 狠狠躁夜夜躁人人爽天天天天97| 日韩av有码在线| 日产精品99久久久久久| 91精品一区二区| 北条麻妃在线一区二区| 欧美成人免费小视频| 中文字幕自拍vr一区二区三区| 国产成人97精品免费看片|