Php 条令2无法运行选择查询问题

Php 条令2无法运行选择查询问题,php,sql,symfony,pdo,doctrine-orm,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); $stm

我遇到了这个问题,我不知道为什么会发生。 我使用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;
但是它返回数组0{}。 我不知道为什么???在我的数据库中,查询运行良好。 有人能帮我吗?

您可以使用DQL:

$logins = ['acb', 'gfh'];
$dql = " 
        SELECT a.last_ip
        FROM Accounts a
        WHERE a.login IN (?1)
";
$q = $this->em->createQuery($dql)->setParameter(1, $logins);
$result = $q->execute();

为in条件中要使用的每个值添加单独的绑定参数。这样,分隔值的逗号就不是值的一部分,也不会有引号转义。如果需要从数组中获取值,可以迭代数组,调用每个值

$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;
编辑:

根据关于未知数量的值的注释,正如我在上面的解释中提到的,应该能够在假定值位于数组中的情况下循环遍历这些值,并使用将参数名称添加到查询文本中,与下面的示例类似,还可以与使用$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);
}

你有什么错误吗?你能把它寄出去吗?我没有错。“这就是我害怕的地方。”萨米尔根据我们得到的证据,没有错误,只是返回了一个空数组。根据我们提供的证据,OP代码执行的查询似乎与以下类似,参数值被手动替换:从登录“acb,gfh”的帐户中选择last_ip;dontrince dosen不希望在SQLL中使用$login,但这并不方便,尤其是在我们不知道登录次数的情况下。。。ಠ_ಠ xxxx美元是多少?