我在查詢中使用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")
?
你會如何運行其他與Drupal6 'IN( 「文本」, 「文本」, 「文本」)' 查詢,而無需使用db_placeholders?你爲什麼期望'varchar'和'text'的工作方式不同?雖然我同意'varchar'應該被使用,但如果這是我嘗試的唯一改變,我不會指望這種行爲會有所不同。我嘗試用'varchar'替換,結果相同。 – 2010-11-20 21:57:46
'text'應該可以正常工作,雖然'varchar'可能是正確的類型。問題是將參數傳遞給函數。 – 2010-11-21 19:28:06