gpt4 book ai didi

php - 准备好的语句不返回任何行

转载 作者:可可西里 更新时间:2023-11-01 08:30:01 25 4
gpt4 key购买 nike

简要版本(没有 try 和 catches):

$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";

我正在绑定(bind) $filter 对象的属性,因为查询是动态的,具体取决于 $filter 的属性。有没有可能我没有绑定(bind)我认为我绑定(bind)的东西?

最佳答案

使用准备好的语句时,不要引用您稍后想安全“注入(inject)”到语句中的内容。

如果你查询这个

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

它会逐字查找具有该名称的用户,这就是为什么它会在您查询数据库时逐字查找用户“:lot”。

改为使用

"SELECT * FROM table WHERE user = :user_name"

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

->execute ();

现在它会安全地将 $var 注入(inject)准备好的语句中,然后你就可以执行它了

关于php - 准备好的语句不返回任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29565135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com