2016-11-30 7 views
2

私はなぜこの問題が発生しているのか分かりません。このようなdao.account.phpと Iコード:Doctrine 2はSELECTクエリの問題を実行できません

$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){}を返します。 私はなぜか分からない???私のデータベースでは、クエリはうまくいきました。 誰かが私を助けることができますか?

+0

エラーが発生しましたか?あなたはそれを投稿できますか? – Samir

+0

エラーはありません。それは私はそれを怖いです。 – Hanata

+0

@Samir私たちが与えた証拠から、エラーはありませんが、空の配列が返されます。我々が与えられた証拠から、OPのコードによって実行されているクエリは以下のようになります(パラメータ値を手動で置き換えて): 'SELECT last_ip FROM accounts WHERE login IN( '' 'acb' '、' ' gfh '' ');' –

答えて

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(); 
+0

dontrince dosenはSQLで$ loginを使用したい – Hanata

2

IN()条件で使用する値ごとに個別のバインドされたパラメータを追加します。そうすれば、値を区切るコンマは値の一部ではなく、引用符はエスケープされません。配列から値を取得する必要がある場合は、各値に対して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; 

編集:値の数が不明についてのコメントパー

私は上記の私の説明で示唆したように、1の値をループすることができるはずです(彼らは、アレイ内にある仮定) 、および(1も$stmt->bindValue()と文字列を返すを呼び出すために$stmtを使用していることをコールバックでarray_map()を使用することができます)以下の例のように、クエリテキストにパラメータ名を追加するためにimplode()を使用します。

$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); 
} 
+1

しかし、特にログインの回数がわからない場合に便利です... –

+0

最近の編集で追加をご覧ください –

+0

なぜ$ xxxxを$ sqlの外側に使用できないのですか? – Hanata

関連する問題