查询:
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>";
}
}
}
答案 0 :(得分: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)));
答案 1 :(得分: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"
.................