我遇到了这个问题,但我不知道为什么会发生。
我使用 dao.account.php
进行编码,如下所示:
$sql = "
SELECT last_ip
FROM accounts
WHERE login IN (:strAcc)
";
$strAcc = " \'acb\' , \'gfh\' ";
$pdo = $this->em->getConnection();
$stmt = $pdo->prepare($sql);
$stmt->bindValue('strAcc',$strAcc);
$stmt->execute();
$rs = $stmt->fetchAll();
return $rs;
但它返回array(0){}
。
我不知道为什么???在我的数据库中,查询运行良好。
有人可以帮助我吗???
最佳答案
为 IN () 条件中使用的每个值添加单独的绑定(bind)参数。这样,分隔值的逗号就不是值的一部分,并且不会出现引号转义。如果需要从数组中获取值,可以迭代该数组,调用 bindValue()对于每个值。
$sql = "
SELECT last_ip
FROM accounts
WHERE login IN (:login1, :login2)
";
$pdo = $this->em->getConnection();
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':login1',"acb");
$stmt->bindValue(':login2',"gfh");
$stmt->execute();
$rs = $stmt->fetchAll();
return $rs;
编辑:
根据关于未知数量值的评论,正如我在上面的解释中提到的,应该能够循环遍历值(假设它们位于数组中),并使用 implode()将参数名称添加到查询文本中,如下例所示(也可以使用 array_map() 和回调,使用 $stmt
来调用 $stmt ->bindValue()
并返回字符串):
$pdo = $this->em->getConnection();
$parameterNames = array();
foreach ($values as $index => $value) {
$parameterNames[] = ':login'.$index;
}
$sql = "
SELECT last_ip
FROM accounts
WHERE login IN (".implode(', ', $parameterNames).") ";
$stmt = $pdo->prepare($sql);
foreach ($values as $index => $value) {
$stmt->bindValue(':login'.$index, $value);
}
关于php - Doctrine 2 无法运行 SELECT 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40881188/