数据库
首页 > 数据库> > mysql – 如何在D7中使此查询工作?

mysql – 如何在D7中使此查询工作?

作者:互联网

我正在尝试从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标准.

但它一直在给我

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).

此数据库查询是template.php片段的一部分,该片段在“私人消息”模块中显示用户图片,并使其看起来像Facebook或其他社交网站.你可以在这里看到完整的片段.因为私有消息具有统一值$participant(或消息线程),所以此DB查询基本上试图隔离除当前用户之外的最后一个作者.

什么是正确的语法?

解决方法:

正如错误消息所示:’传递给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文档.

标签:sql,mysql,drupal,drupal-7
来源: https://codeday.me/bug/20190826/1729335.html