Пример использования 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
Добавить комментарий