首頁  >  文章  >  後端開發  >  php pdo參數化查詢怎麼實現

php pdo參數化查詢怎麼實現

藏色散人
藏色散人原創
2021-09-20 10:16:512060瀏覽

在PHP中可以透過prepare方法進行PDO參數化查詢,該方法會傳回一個PDOStatement對象,使用語法如「prepare('SELECT login_oid FROM logined WHERE user_id=...」。

php pdo參數化查詢怎麼實現

本文操作環境:Windows7系統、PHP7.1、Dell G3電腦。

php pdo參數化查詢怎麼實作?

PDO參數化查詢prepare() php防SQL注入

PDO中參數化查詢主要用到prepare()方法,然後這個方法會回傳一個PDOStatement對象,也就SQL宣告(不知道怎麼翻譯),此時SQL語句只是被編譯,但並未執行,呼叫PDOStatement中方法後會執行SQL語句,如下範例:

$sm = $db->prepare('SELECT login_oid FROM logined WHERE user_id=:user_id;');
$sm->bindValue(':user_id', $user_id, PDO::PARAM_INT);
$sm -> execute();

在execute()執行前,就可以呼叫bindValue( )或bindParam()方法替換之前準備的SQL語句中的你指定參數了,在SQL語句中指定參數有兩種方式:':name'和'?',上面程式碼中的用的是前一種,後者的方式是:

$sm = $db->prepare(&#39;SELECT * FROM fruit WHERE calories < ?;&#39;);
$sm->bindValue(1, $calories, PDO::PARAM_INT);
$sm->execute();

bindValue()有三個參數,第一個指定要替換掉SQL語句中哪一個參數,第二個指定替換後的值,第三個指定值的類型,型別對應如下:

PDO::PARAM_BOOL

布林型別

PDO::PARAM_NULL

NULL型別

PDO::PARAM_INT

整數型別

PDO::PARAM_STR

字串型別如CHAR, VARCHAR, string

PDO::PARAM_LOB

資源類別大對象,如檔案等

PDO::PARAM_STMT

不知道

PDO::PARAM_INPUT_OUTPUT

這個好像是擴充類型

裡面沒有提供實數類型,這個很詬異.

再說說execute()這個方法,它本身也可以做參數替換,但是它會把所有值的類型都變成字串類型,如下

$sm = $db->prepare(&#39;SELECT * FROM fruit WHERE calories < ?;&#39;);
$sm->execute(array($calories));

多參數替換如下

$sm = $db->prepare(&#39;SELECT * FROM fruit WHERE calories < ?, id < ?;&#39;);
$sm->execute(array($calories, $user_id));

推薦學習:《PHP影片教學

以上是php pdo參數化查詢怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn