Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 尝试使用模块化查询时,PDO fetch不返回任何内容_Php_Mysql_Pdo_Fetch_Explode - Fatal编程技术网

Php 尝试使用模块化查询时,PDO fetch不返回任何内容

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; } 注意:我只是使用一个数组中的键,该数组是在

我的想法是,我有一个用户数组,从中获取键来创建一个字符串供pdo准备(用户索引)。然后将该数组中的用户绑定到相应的参数

$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是新的。