为什么在 PHP 中没有返回结果,但在 MySQL 中有呢?

4

查询:

SELECT * FROM ac_journal WHERE datetime < (SELECT datetime FROM ac_journal WHERE jid = 1089 AND rid IN ('2','3','4')) ORDER BY datetime DESC LIMIT 1

当我在phpmyadmin中执行此查询时,我得到了一行结果。 enter image description here 但是在我的代码中,没有返回任何内容。
function ac_journal_get_previous_entry($jid)
{
  global $user; //1
  echo $jid; //1089
  echo "<br />'" . implode("','", array_keys($user->roles)) . "'"; //'2','3','4'

  if ($jid > 0)
  {
    $result = db_query("SELECT * FROM {ac_journal} WHERE datetime < (SELECT datetime FROM {ac_journal} WHERE jid = ? AND rid IN (?)) ORDER BY datetime DESC LIMIT 1", array($jid, "'" . implode("','", array_keys($user->roles)) . "'"));
    $obj = $result->fetchAll();
    echo $result->rowCount(); //0

    if (is_array($obj) && count($obj) > 0)
    { 
      echo "HERE"; //never gets here
      return "<a href='https://example.com/journal/" . $obj[0]->jid . "'>Previous</a>";
    }
  }
}

@Fred-ii- 看起来它们在数组中,作为 db_query() 的第二个参数 -> array($jid, "'" . implode("','", array_keys($user->roles)) . "'") - Sean
你的 PHP 中为什么在表名周围加上花括号 -> {ac_journal} - Sean
@Sean 这是我询问的部分 WHERE jid = ? AND rid IN (?) - 应该有某种类型的绑定发生吗?我错过了什么? - Funk Forty Niner
@Sean 因为我正在使用Drupal(7) - user135596
为什么不尝试回显创建的查询,看看它是否与在PHPMyAdmin中工作的查询相同:echo "SELECT * FROM {ac_journal} WHERE datetime < (SELECT datetime FROM {ac_journal} WHERE jid = ? AND rid IN (?)) ORDER BY datetime DESC LIMIT 1", array($jid, "'" . implode("','", array_keys($user->roles)) . "'") - junkforce
显示剩余4条评论
2个回答

2
我不得不将其更改为这样:
$result = db_query('SELECT * FROM {ac_journal} WHERE datetime < (SELECT datetime FROM {ac_journal} WHERE jid = :jid) AND rid IN (:rid) ORDER BY datetime DESC LIMIT 1', array(':jid' => $jid, ':rid' => array_keys($user->roles)));

使用命名占位符更加清晰!给你一个赞,因为你找到了自己的解决方案。 - ElefantPhace

0

这一行代码在echo中没有任何结果:fetchAll();

$obj = $result->fetchAll();

尝试将其改为:
fetch(PDO::FETCH_ASSOC);

但是,在获取对象之前,请先执行数组,如下:

$obj->execute(array(':jid' => $jid ));
$result = $obj->fetch(PDO::FETCH_ASSOC);

if (is_array($result) && count($result) > 0){ 
     echo "HERE"
.................

来源:http://php.net/manual/zh/pdostatement.fetch.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接