Php 尝试使用模块化查询时,PDO fetch不返回任何内容
我的想法是,我有一个用户数组,从中获取键来创建一个字符串供pdo准备(用户索引)。然后将该数组中的用户绑定到相应的参数Php 尝试使用模块化查询时,PDO fetch不返回任何内容,php,mysql,pdo,fetch,explode,Php,Mysql,Pdo,Fetch,Explode,我的想法是,我有一个用户数组,从中获取键来创建一个字符串供pdo准备(用户索引)。然后将该数组中的用户绑定到相应的参数 $sql = SELECT * FROM `tablename` WHERE `payload` IS NOT NULL 我向该字符串添加了一个参数,如下所示: foreach($users as $key => $user){ $sql = $sql." AND `user` LIKE :user".$key; } 注意:我只是使用一个数组中的键,该数组是在
$sql = SELECT * FROM `tablename` WHERE `payload` IS NOT NULL
我向该字符串添加了一个参数,如下所示:
foreach($users as $key => $user){
$sql = $sql." AND `user` LIKE :user".$key;
}
注意:我只是使用一个数组中的键,该数组是在用户定义的字符串上使用explode语句生成的。不是100%确定钥匙是否安全,但我没有发现相关信息
由此生成的字符串与users=数组([0]=>01)
相等:
SELECT * FROM `tablename`
WHERE `payload` IS NOT NULL
AND `user` LIKE :user0
SELECT * FROM `tablename` WHERE `payload` IS NOT NULL AND `user` LIKE "%01%"
稍后,我将使用以下命令绑定值:
foreach($users as $key => $user){
$stmt->bindValue(":user".$key, "\"%".$user."%\"");
}
这意味着execute()
的语句等于:
SELECT * FROM `tablename`
WHERE `payload` IS NOT NULL
AND `user` LIKE :user0
SELECT * FROM `tablename` WHERE `payload` IS NOT NULL AND `user` LIKE "%01%"
如果我在phpmyadmin上执行此语句,我会得到368个结果,但这个while循环根本不会执行:
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
// do stuff
}
$db->errorInfo()
返回此数组([0]=>00000[1]=>[2]=>)
编辑:已解决。
我不需要在参数中添加引号,因为mysql正在搜索我的列中的引号。我建议采用以下解决方案:
<?php
$sql = "SELECT * FROM `tablename` WHERE `payload` IS NOT NULL";
foreach($users as $key => $user){
$sql .= " AND `user` LIKE ?";
}
$i = 1;
foreach($users as $key => $user){
$stmt->bindValue($i, "\"%".$user."%\"", PDO::PARAM_STR);
++$i;
}
?>
您不需要引用参数值。只需执行$stmt->bindValue(“:user”$key“%$user%”)代码>。问题解决了吗?谢谢,问题已经解决了。问题已经解决了。我不需要引用参数值。在引号中,MySQL也在“代码>用户< /代码>栏中搜索引号。@如果您认为我的答案对您有帮助,您可以将其作为校正器检查,对不起,我对StAdvoad是新的。