2017-02-01 7 views
0

Я пытаюсь выполнить запрос, который показывает только статьи внутри этого массива $res. Она содержит идентификаторы статейORDER BY FIELD (id,?) Не работает в PDO

$res = Array ([0] => 42 [1] => 41); 

$res1 = $res; 
$res2 = $res; 

$Search = $db->prepare(" 
    SELECT * FROM articles 
    WHERE id IN :res1 
    ORDER BY FIELD(id, :res2); 
"); 

$Search->execute([ 
    ':res1' => $res1, 
    ':res2' => $res2 
]); 

но returnig этой ошибки

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? ORDER BY FIELD(id, ?)' at line 2 in C:\xampp\htdocs\index.php:16 Stack trace: #0 C:\xampp\htdocs\index.php(16): PDO->prepare('\r\n\t\t\tSELECT * F...')

+0

'WHERE id IN' ожидает список типа' ('1', '2') ', но вы указали строку типа' 'blah''. Кроме того, Field, вероятно, хочет использовать int вместо строки. – bassxzero

+0

объясните больше, если вы можете –

+0

@ jay-blanchard Я не думаю, что это обман. Его код, похоже, не пытается заменить имя таблицы или столбца, как связанный с вами вопрос. – bassxzero

ответ

3

Вы пытаетесь передать массив в качестве параметра. Это не сработает. Кроме того, IN берет в круглых скобках список, разделенный запятой, и это не так, как объявить массив в PHP.

$res = [42, 41]; 

$params = array_merge($res, $res); 
// build a big list of question marks 
// for a two element array we get ?,? 
$placeholder = trim(str_repeat("?,", count($res)), ","); 

$Search = $db->prepare(" 
    SELECT * FROM articles 
    WHERE id IN ($placeholder) 
    ORDER BY FIELD(id, $placeholder); 
"); 

$Search->execute($params); 
+0

Ваш ответ заключается в работе шва –

0

Попробуйте это. Я знаю, что вам не хватает вашего заказа, но мы можем добраться до этого через минуту.

$res = Array ('0' => 42 '1' => 41); 

$inQuery = $inQuery = implode(',', array_fill(0, count($res), '?')); 


$Search = $db->prepare(" 
    SELECT * FROM articles 
    WHERE id IN ({$inQuery})  
"); 

$Search->execute($res); 
+0

вы уверены, что мне не нужна FIELD, потому что в моей документации кода у меня есть 'ORDER BY FIELD предложение важно иначе механизм базы данных не вернет результаты в требуемом порядке' –

 Смежные вопросы

  • Нет связанных вопросов^_^