簡體   English   中英

Prepared語句不返回任何行

[英]Prepared statement returns no rows

簡要版(沒有嘗試和捕獲):

$dbConnection = new PDO("mysql:host=$serverName;dbname=$dbName", $userName, $password, $dbOptions);
$dbStatement = $dbConnection->prepare('SELECT * FROM bin_content WHERE LotId=":lot";');
dbStatement->bindParam(':' . $key, $filter->$key);
// $filter->lot contains "A32" and $key="lot",
// so I'm assuming "A32" will be filled into the statement
$dbStatement->execute(); // this is actually in a try/catch, and no exceptions are caught here
$row = $dbStatement->fetch(); // this returns false

如上面的代碼所述, fetch()返回false ,但如果我使用以下SQL語句手動查詢我的數據庫,則返回一行:

SELECT * FROM bin_content WHERE LotId="A32";

我綁定了$filter對象的屬性,因為查詢是動態的,具體取決於$filter的屬性。 有可能我以某種方式約束我認為我具有約束力的東西嗎?

使用預准備語句時,請不要引用您希望以后“安全”注入語句的內容。

如果你查詢這個

"SELECT * FROM table WHERE user = 'some-user'" 

它將逐字地查找具有該名稱的用戶,這就是為什么在查詢數據庫時它實際上會查找用戶“:lot”的原因。

而是使用

"SELECT * FROM table WHERE user = :user_name"

bindParam->(':user_name', $var);

->execute ();

現在它會安全地將$ var注入預處理語句,然后就可以執行了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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