尝试使用模块化查询时,PDO 不获取 returns 任何内容
PDO fetch returns nothing when trying to use a modular query
我的想法是我有一个用户数组,从中获取键来创建一个字符串供 pdo 准备(用户索引)。然后将用户从该数组绑定到相应的参数。
$sql = SELECT * FROM `tablename` WHERE `payload` IS NOT NULL
我用这个给这个字符串添加了一个参数:
foreach($users as $key => $user){
$sql = $sql." AND `user` LIKE :user".$key;
}
注意:我只是使用数组中的键,该数组是通过用户定义的字符串上的 explode 语句生成的。不能100%确定密钥是否安全,但我没有找到这方面的相关信息。
由此生成的字符串与用户 = array([0]=>01)
等于:
SELECT * FROM `tablename`
WHERE `payload` IS NOT NULL
AND `user` LIKE :user0
稍后我使用这个绑定值:
foreach($users as $key => $user){
$stmt->bindValue(":user".$key, "\"%".$user."%\"");
}
这意味着 execute()
的语句等于:
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()
returns这个Array ( [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;
}
?>
我的想法是我有一个用户数组,从中获取键来创建一个字符串供 pdo 准备(用户索引)。然后将用户从该数组绑定到相应的参数。
$sql = SELECT * FROM `tablename` WHERE `payload` IS NOT NULL
我用这个给这个字符串添加了一个参数:
foreach($users as $key => $user){
$sql = $sql." AND `user` LIKE :user".$key;
}
注意:我只是使用数组中的键,该数组是通过用户定义的字符串上的 explode 语句生成的。不能100%确定密钥是否安全,但我没有找到这方面的相关信息。
由此生成的字符串与用户 = array([0]=>01)
等于:
SELECT * FROM `tablename`
WHERE `payload` IS NOT NULL
AND `user` LIKE :user0
稍后我使用这个绑定值:
foreach($users as $key => $user){
$stmt->bindValue(":user".$key, "\"%".$user."%\"");
}
这意味着 execute()
的语句等于:
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()
returns这个Array ( [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;
}
?>