クエリ内で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
Notice、a.view_path IN ('','','','')
です。それが問題だ。私は、db_placeholderが正しい構文で使用されることを期待しています。
誰かが私のdb_placeholderの使用が("commentary_analysis/18", "commentary_analysis/16", "commentary_analysis/95", "commentary_analysis/89")
の代わりに('','','','')
を返す理由を教えてもらえますか?
他にどのようにあなたがdb_placeholdersを使用せずにDrupal6の 'IN( "テキスト"、 "テキスト"、 "テキスト")' でクエリを実行しますか?なぜあなたは 'varchar'が 'text'とは違った働きをすると思いますか? 「varchar」が使用されるべきだと私は同意するが、私が試した唯一の変更であれば、その動作が異なるとは思わないだろう。私は 'varchar'と置き換えてみましたが、同じ結果を得ました。 –
'text'は正常に動作するはずですが、 'varchar'がおそらく適切なタイプです。問題は、引数を関数に渡すことです。 –