在PHP中可以透過prepare方法進行PDO參數化查詢,該方法會傳回一個PDOStatement對象,使用語法如「prepare('SELECT login_oid FROM logined WHERE user_id=...」。
本文操作環境: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('SELECT * FROM fruit WHERE calories < ?;'); $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('SELECT * FROM fruit WHERE calories < ?;'); $sm->execute(array($calories));
多參數替換如下
$sm = $db->prepare('SELECT * FROM fruit WHERE calories < ?, id < ?;'); $sm->execute(array($calories, $user_id));
推薦學習:《PHP影片教學》
以上是php pdo參數化查詢怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!