Drupal → Тонкость совместного использования db_query() и db_placeholders()
Пример использования db_placeholders
:
$nids = array(1, 2, 3); $result = db_query(" SELECT * FROM {node} WHERE nid IN (" . db_placeholders($nids) . ") ", $nids);
Всё просто. Но если в запросе нужно использовать больше одного условия, то по привычке можно написать так:
$nids = array(1, 2, 3); $uid = 1; $result = db_query(" SELECT * FROM {node} WHERE nid IN (" . db_placeholders($nids) . ") AND uid = %d ", $nids, $uid); // not work
Что окажется неверным. uid
в данном случае всегда будет сравниваться с нулём. Правильно так:
$nids = array(1, 2, 3); $uid = 1; $result = db_query(" SELECT * FROM {node} WHERE nid IN (" . db_placeholders($nids) . ") AND uid = %d ", array_merge($nids, array($uid))); // work!
Объединять массивы нужно в той последовательности, в которой они используются в запросе.
Оставить комментарий