Drupal → Тонкость совместного использования db_query() и db_placeholders()

09.05.2010

Пример использования 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!

Объединять массивы нужно в той последовательности, в которой они используются в запросе.

Написанное актуально для
Drupal 6.x
Похожие записи

Добавить комментарий