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

时间:2015-03-11 03:34:25

标签: 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;
}

注意:我只是使用在用户定义的字符串上使用explode语句生成的数组中的键。不是100%确定密钥是否安全,但我没有找到相关信息。

使用users = 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()会返回此Array ( [0] => 00000 [1] => [2] => )


编辑:已解决。
当mysql在我的列中搜索引号时,我不需要在参数中添加引号。

1 个答案:

答案 0 :(得分:0)

我建议这个解决方案:

<?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;
}

?>