我正在使用 php mysql-pdo 和 symfony
问题是:我有一个查询,如下所述
WHERE STATUS IN (:STATUS)
状态值为A','B
。
当我将它绑定为刺痛时,它的转义如下
WHERE STATUS IN ('A\',\'B')
因此输出错误。
请帮忙
准备好的语句只能代表一个完整的数据字面量。不是文字的一部分,也不是复杂的表达式,也不是标识符。但只有字符串或数字。因此,您的查询不起作用,因为您实际上是在绑定一个复杂的表达式,而不是因为引号
必须使用代表每个数组成员的占位符创建一个查询,然后绑定此数组值以执行:
$ids = array(1,2,3);
$stm = $pdo->prepare("SELECT * FROM t WHERE id IN (?,?,?)");
$stm->execute($ids);
为了使这个查询更灵活,最好用 ?s 动态创建一个字符串:
$ids = array(1,2,3);
$in = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE column IN ($in)";
$stm = $db->prepare($sql);
$stm->execute($ids);
$data = $stm->fetchAll();
当然,如果我们还有其他要绑定的变量,我们需要将它们添加到 values 数组中:
$ids = array(1,2,3);
$in = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE column IN ($in) AND category=?";
$stm = $db->prepare($sql);
$ids[] = $category; //adding another member to array
$stm->execute($ids);
$data = $stm->fetchAll();
代码变得非常臃肿,但这就是 PDO 可以提供的处理这种复杂情况的全部内容。作为进一步的改进,人们可以发明自己的占位符来支持这种复杂的数据类型。