簡體   English   中英

PHP PDO Basic編寫的聲明

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM