Php Prepared语句不返回任何行
简要版本(不含try's和Catch): 如上述代码所述,Php Prepared语句不返回任何行,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,简要版本(不含try's和Catch): 如上述代码所述,fetch()返回false,但如果我使用以下SQL语句手动查询数据库,则返回一行: SELECT * FROM bin_content WHERE LotId="A32"; 我正在绑定$filter对象的属性,因为查询是动态的,这取决于$filter的属性。有没有可能我没有绑定我认为绑定的内容?在使用准备好的语句时,不要引用您希望稍后安全地“注入”到语句中的内容 如果你质疑这一点 "SELECT * FROM table WHERE
fetch()
返回false
,但如果我使用以下SQL语句手动查询数据库,则返回一行:
SELECT * FROM bin_content WHERE LotId="A32";
我正在绑定
$filter
对象的属性,因为查询是动态的,这取决于$filter
的属性。有没有可能我没有绑定我认为绑定的内容?在使用准备好的语句时,不要引用您希望稍后安全地“注入”到语句中的内容
如果你质疑这一点
"SELECT * FROM table WHERE user = 'some-user'"
它将字面上查找具有该名称的用户,这就是为什么它在查询数据库时字面上查找users“:lot”
改用
"SELECT * FROM table WHERE user = :user_name"
bindParam->(':user_name', $var);
->execute ();
现在,它将安全地将$var注入到准备好的语句中,然后您可以执行它删除
“:lot”
周围的引号您因为一些奇怪的原因使用了双引号,代码>在您的准备中。你两个都不需要。@N.B.还有肖恩,原因其实并不奇怪。这是我第一次尝试准备好的陈述。Noob错误:)你们也可以从中得到一些好处(这可能有助于未来的noob)。发布一些答案,我会投票并选择。这是一个常见的错误,我个人同意你只是纠正它:)
"SELECT * FROM table WHERE user = :user_name"
bindParam->(':user_name', $var);
->execute ();