我正在尝试从template.php D6网站的第52行重写此数据库查询
$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);
进入D7标准。
但它一直在给我
可恢复的致命错误:传递给db_query()的参数2必须是 数组,字符串给定,调用 在线:C:\ wamp2 \ www \ site-name \ sites \ all \ themes \ simpler \ template.php 52并在db_query()中定义(第2313行) C:\ wamp2 \ WWW \站点名\包括\数据库\ database.inc)
此数据库查询是template.php片段的一部分,该片段在私人消息模块中显示用户图片,并使其看起来像Facebook或其他社交网站。你可以在这里看到完整的片段。因为私有消息具有统一值$ participant(或消息线程),所以此DB查询基本上试图隔离除当前用户之外的最后一个作者。
正确的语法是什么?
答案 0 :(得分:6)
正如错误消息所示:'传递给db_query()的参数2必须是数组...'。
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()
- 这仅适用于只返回一个字段的查询(如此字段)。如果您需要获取更多字段或记录,请查看DatabaseStatementInterface文档。