PHP簡(jiǎn)單PDO

PDO(PHP Data Object)機(jī)制防御sql注入,這是因?yàn)椴荒苁褂肞DO擴(kuò)展本身執(zhí)行任何數(shù)據(jù)庫(kù)操作,而sql注入的關(guān)鍵就是通過(guò)破壞sql語(yǔ)句結(jié)構(gòu)執(zhí)行惡意的sql命令。

PDO庫(kù)中定義了一些靜態(tài)常量,這些常量用PDO :: <NAME>的方式進(jìn)行調(diào)用。比如在prepare()語(yǔ)句中經(jīng)常這樣使用:

$query=$db->prepare('select * from book where cat_id=:id limit :offset, :limit', array (
PDO :: ATTR_CURSOR => PDO :: CURSOR_FWDONLY
));

PDO中的連接和連接管理

$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
    PDO::ATTR_PERSISTENT => true
));

PDO中的查詢操作:exec/query/prepared statement

1)PDO::exec()一般用于執(zhí)行一次的SQL語(yǔ)句,返回受查詢影響的行數(shù)。它不適用于SELECT語(yǔ)句,如果需要用一次是SELECT語(yǔ)句,可以用PDO::query();也不適用于多次使用的語(yǔ)句,如果有多次使用的需求,考慮用PDO::prepare()。
(2)PDO::query()用于執(zhí)行一次SELECT語(yǔ)句,執(zhí)行后應(yīng)當(dāng)隨即使用PDOStatement::fetch()語(yǔ)句將結(jié)果取出,否則立即進(jìn)行下一次的PDO::query()將會(huì)報(bào)錯(cuò)。在2.PDO實(shí)例部分,為了得到查詢數(shù)據(jù)的總量,就用了PDO::query()語(yǔ)句。
(3)PDOStatement表示一個(gè)prepared statement語(yǔ)句,而在執(zhí)行之后,又將返回一組關(guān)聯(lián)數(shù)組的結(jié)果。如果一類查詢(查詢結(jié)構(gòu)相似而具體的參數(shù)不一)需要一次解析而執(zhí)行使用很多次,可以先用prepared statement,這樣可以為具體的查詢的執(zhí)行做好準(zhǔn)備,避免了分析、編譯、優(yōu)化的循環(huán),將減少資源占用率,從而提高運(yùn)行效率。通過(guò)對(duì)數(shù)據(jù)庫(kù)進(jìn)行prepare操作,便會(huì)返回PDOStatement數(shù)據(jù)類型,從而在其基礎(chǔ)上展開execute、fetch等進(jìn)一步的操作。

prepare特殊使用

//用位置參入?yún)?shù)
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

//用名稱傳入?yún)?shù)
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

$name = 'one';
$value = 1;
$stmt->execute();

/////////////////////////////////////////////
//也可以這樣實(shí)現(xiàn)
//用位置參入?yún)?shù),indexed array
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$name = 'one';
$value = 1;
$stmt->execute(array($name,$value));

//用名稱傳入?yún)?shù), associated array
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$name = 'one';
$value = 1;
$stmt->execute(array(':name'=>$name,':value'=>$value));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容