Сложность использования массива как части запроса PDO IN

Я пытаюсь запросить базу данных MySQL, используя массив.

$array=array('Group1','Group2','Group3');
$inQuery=implode(",",$array);
//$inQuery='Group1'; //This returns the expected result, but is obviously not an array

$data=array($inQuery);
try {
  $STH = $this->DBH->prepare('SELECT GroupName FROM myTable WHERE GroupName IN(?)');            
  $STH->execute($data);
  /* Output results*/
}
catch(PDOException $e) { /*Panic!*/ }

Я не получаю сообщения об ошибках, просто 0 результатов. Любая помощь будет оценена по достоинству!


person Matt    schedule 27.06.2011    source источник
comment
Предложение SQL IN не поддерживает использование одной переменной для списка значений — вам потребуется ? для каждого значения массива.   -  person OMG Ponies    schedule 28.06.2011


Ответы (2)


Вы можете попробовать этот способ - не проверено -:

// To fetch your array data
$array=array('Group1','Group2','Group3');
try {
  $STH = $this->DBH->prepare("SELECT GroupName FROM myTable WHERE GroupName IN (?)");            
  $STH->execute($array);
  while($lines=$STH->fetch($this->DBH->FETCH_OBJ))
{
        echo $lines->GroupName.'<br />';
}

}
catch(PDOException $e) { 
/*Panic!*/ 
echo 'ERR: ' .$e->getMessage().'<br/>';
}
person hornetbzz    schedule 27.06.2011

На всякий случай, если кто-нибудь еще когда-нибудь столкнется с этим....

Оказалось, что это проблема с выходом из взорванного массива.

$array=array('Group1','Group2','Group3');
$inQuery=implode(",",$array);
$inQuery="'".$inQuery."'"; //Solved the issue.

$data=array();
try {
  $STH = $this->DBH->prepare('SELECT GroupName FROM myTable WHERE GroupName IN($inQuery)');            
  $STH->execute($data);
  /* Output results*/
}
catch(PDOException $e) { /*Panic!*/ }
person Matt    schedule 02.08.2011