为什么php中没有返回结果,而mysql中却有返回结果?

为什么php中没有返回结果,而mysql中却有返回结果?,php,mysql,drupal-7,Php,Mysql,Drupal 7,查询: 当我在phpmyadmin中执行这个查询时,我得到一行 在我的代码中,它没有返回任何内容 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 我不得不把它改成这样: function ac_journal_get_previous_en

查询:

当我在phpmyadmin中执行这个查询时,我得到一行

在我的代码中,它没有返回任何内容

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

我不得不把它改成这样:

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>";
    }
  }
}

该行在echo:fetchAll中不产生任何结果;例如:

尝试将其更改为:

$obj = $result->fetchAll();
但是,在获取对象之前首先执行数组,如中所示:

fetch(PDO::FETCH_ASSOC);

来源:

您正在使用占位符吗?但是没有对它们做任何事情。@Fred ii-看起来它们在数组中,作为db_query->array$jid的第二个参数,'。内爆“,”,数组_键$user->roles为什么在php->{ac_journal}中的表名周围有花括号?@Sean这就是我要问的jid=?还有rid IN——难道不应该发生某种类型的绑定吗?我遗漏了什么?@Sean因为我正在使用Drupal 7Much cleaner来使用命名占位符+1用于找到自己的解决方案
fetch(PDO::FETCH_ASSOC);
$obj->execute(array(':jid' => $jid ));
$result = $obj->fetch(PDO::FETCH_ASSOC);

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