【问题标题】:Why is there no results returned in php, but there are in mysql?为什么php中没有返回结果,而mysql中有?
【发布时间】:2015-01-28 03:19:43
【问题描述】:

查询:

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 中执行这个查询时,我得到了一行

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

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-&gt;roles)) . "'")
  • 为什么你的 php 中的表名周围有大括号 -> {ac_journal}?
  • @Sean 这是我要问的关于WHERE jid = ? AND rid IN (?) 的部分——不应该发生某种类型的绑定吗?我错过了什么?
  • @Sean 因为我使用的是 Drupal (7)

标签: php mysql drupal-7


【解决方案1】:

我不得不把它改成这样:

$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)));

【讨论】:

  • 使用命名占位符更简洁! +1 寻找您自己的解决方案
【解决方案2】:

此行没有回显结果:fetchAll();as in;

$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/en/pdostatement.fetch.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2016-05-17
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多