Я использую db_placeholder в запросе, чтобы заменить массив строк.Почему db_placeholder возвращает пустые строки для моего запроса?
$paths = array("commentary_analysis/18", "commentary_analysis/16", "commentary_analysis/95", "commentary_analysis/89");
$query = "SELECT DISTINCT a.uid, u.mail FROM {alerts} a JOIN {users} u on u.uid = a.uid WHERE u.mail IS NOT NULL AND u.mail != '' AND u.status = 1 AND a.status = %d AND a.view_path IN (" . db_placeholders($paths, 'text') . ") ORDER BY a.uid ASC";
$users_to_notify = db_query($query, $alert_status, $paths);
Запрос не возвращает результаты, когда я это знаю. Я отладил запрос, чтобы увидеть точный запрос, который запускается. Запрашиваемый запрос:
SELECT DISTINCT a.uid, u.mail FROM alerts a JOIN users u on u.uid = a.uid WHERE u.mail IS NOT NULL AND u.mail != '' AND u.status = 1 AND a.status = 1 AND a.view_path IN ('','','','') ORDER BY a.uid ASC
Уведомление, a.view_path IN ('','','','')
. Это проблема. Из того, что я вижу, я ожидаю, что db_placeholder привыкнет к правильному синтаксису.
Может ли кто-нибудь сказать мне, почему мое использование db_placeholder возвращает ('','','','')
вместо ("commentary_analysis/18", "commentary_analysis/16", "commentary_analysis/95", "commentary_analysis/89")
?
Как бы вы еще выполнить запрос с 'IN ("текст", "Текст", "текст")' в Drupal6 без использования db_placeholders? Почему вы ожидаете, что «varchar» будет работать иначе, чем «текст»? Хотя я согласен, что «varchar» должен использоваться, я бы не ожидал, что поведение будет отличаться, если это единственное изменение, которое я пробую. Я попытался заменить «varchar» и имел тот же результат. –
«текст» должен работать нормально, хотя «varchar», вероятно, подходит для использования. Проблема заключается в передаче аргументов функции. –