Пример использования 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
Похожие записи
- Вызов drupal_write_record() в хуке hook_install()
- Производительность Entity Query vs Query Builder vs Sql query
- Отличие методов BaseFieldDefinition::setDefaultValue() и BaseFieldDefinition::setInitialValue()
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
- Views сортировка по выражению/условию/формуле
Добавить комментарий