2012-05-03 36 views
3

私はD7規格にこのクエリはD7でどのように動作させることができますか?

$uid = db_query('SELECT pm.author FROM {pm_message} pm INNER JOIN {pm_index} pmi ON pmi.mid = pm.mid AND pmi.thread_id = %d WHERE pm.author <> %d ORDER BY pm.timestamp DESC LIMIT 1', $thread['thread_id'], $user->uid); 

私のtemplate.phpのD6サイトのライン52からこのデータベースクエリを書き換えしようとしています。

しかし、それは

Recoverable fatal error: Argument 2 passed to db_query() must be an array, string given, called in C:\wamp2\www\site-name\sites\all\themes\simpler\template.php on line 52 and defined in db_query() (line 2313 of C:\wamp2\www\site-name\includes\database\database.inc).

このDBクエリがプライベートメッセージモジュール内のユーザーの写真を示してtemplate.phpスニペットの一部であり、それはFacebookや他のソーシャルネットワーキングサイトのように見える私に与え続けています。ここで完全なスニペットを見ることができます。プライベートメッセージは統一値$ participant(またはメッセージスレッド)を持つため、このDBクエリは基本的に、現在のユーザー以外の最後の著者を分離しようとしています。

正しい構文は何ですか?

答えて

6

エラーメッセージに '引数2がdb_query()に渡された配列でなければなりません...'と表示されます。

のDrupal 7はPDOを使用するデータベースレイヤを切り替えるので、db_query()内のプレースホルダの交換は、ビットを変更 - 試みる:

$query = 'SELECT pm.author FROM {pm_message} pm' 
    . ' INNER JOIN {pm_index} pmi ON pmi.mid = pm.mid AND pmi.thread_id = :thread_id' 
    . ' WHERE pm.author <> :uid' 
    . ' ORDER BY pm.timestamp DESC LIMIT 1'; 
$args = array(
    ':thread_id' => $thread['thread_id'], 
    ':uid' => $user->uid, 
); 
$uid = db_query($query, $args)->fetchField(); 

が分割さと読みやすさのために再フォーマット。テストされていないので、タイプミスに注意してください。

最後に->fetchField()に注意してください。これは、ちょうど1つのフィールド(このようなフィールド)を返すクエリでのみ機能します。さらにフィールドやレコードを取得する必要がある場合は、DatabaseStatementInterfaceのドキュメントをご覧ください。

+0

ありがとうございますが、それでも送信者(現在のユーザー)がメッセージを送信し、受信者がまだ返信していないプライベートメッセージの場合、サイト全体で2つの非常に醜い警告が表示されます。 警告:array_flip()[function.array-flip]:STRINGとINTEGERの値だけを反転できます! DrupalDefaultEntityController-> load()(C:\ wamp2 \ www \ testsite7 \ includes \ entity.incの178行目)にあります。 警告:array_flip()[function.array-flip]:STRINGおよびINTEGERの値だけを反転できます! DrupalDefaultEntityController-> cacheGet()(C:\ wamp2 \ www \ testsite7 \ includes \ entity.incの354行目)にあります。 – drupalina

+0

私たちが解決しようとしている問題の詳細については、この記事のhttp://drupal.org/node/1549540を参照してください。 – drupalina

+0

@drupalina - これらのエラーメッセージはクエリ自体に関連していないようで、一般的な問題/目標の範囲内で完全に別々のエラーのように見えます。 stackoverflowは特定の質問に対する具体的な回答であるため、ここでそれらに対処することは、クエリを機能させるための質問の範囲外です。 –

関連する問題