[英]PHP PDO Basic prepared statement
我正在嘗試使用pdo + mysql做一個基本的預備語句..我似乎無法獲得為我的生命分配的值:/
$dbh = new PDO('mysql:dbname=users;host=127.0.0.1', 'localAPI', 'localAPI');
$a = 'asdf';
$sth = $dbh->prepare("INSERT INTO users (userName, userPass, accountStatus) VALUES (':a', ':userPass', 'unconfirmed')");
$sth->bindParam(':a', $a, PDO::PARAM_STR);
$sth->execute();
有任何想法嗎? 提前致謝!!
表結果:
mysql> select * from users;
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+
| userId | userName | userPass | accountStatus | accountType | balance | tCreated | tUpdated | tLastLogin | promoId | ref |
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+
| 1 | :a | :userPass | unconfirmed | user | 0 | 2010-12-12 13:42:10 | NULL | NULL | NULL | NULL |
+--------+----------+-----------+---------------+-------------+---------+---------------------+----------+------------+---------+------+
你在SQL語句中用引號包圍你的變量... ':a' ..
刪除它們,因為解析器會認為你在這里意味着一個字符串,而不是一個變量。 您告訴數據庫您的意思是帶有bind()
調用的字符串。
var_dump
不應顯示用:test
替換為123
的查詢,這似乎是您期望的。 調用$sth->execute();
你完成了
原因與准備好的語句的工作方式有關。 請參閱,執行查詢時,將發生的查詢是作為字符串發送到數據庫的。 在這里,它被解析為內部形式,然后在解釋器中執行。 使用准備好的語句,變量的值(例如:test
123
)將與查詢分開傳輸和解析。 這意味着您不能“欺騙”解析器-注入類型攻擊所依賴的解析器-僅僅是因為值永遠都不是查詢的一部分,因此也永遠不會到達解析器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.