php - Doctrine 2 无法运行 SELECT 查询问题

标签 php sql symfony pdo doctrine-orm

我遇到了这个问题,但我不知道为什么会发生。 我使用 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/

相关文章:

php - 我如何在单击按钮时执行两个操作

mysql - 从临时表插入到另一个表

sql - 在postgresql中实现除法查询

php - Composer 冲突和 Symfony 3

symfony - laravel 4.1.28 ,symfony/security 建议包

php - deps文件是什么?

php - 显示带有 div php mysql jQuery 的链接

php - 如果 EXIF 信息更新,则不会更改的唯一图像哈希

javascript - 无法调用php函数

sql - Oracle 中的递归查询