1

在发布这个问题之前,我已经阅读了我可以很好的所有回复。虽然相似,但没有一个解决我的特定问题(或者我不认识他们这样做)。

我有一个扩展 Zend_Db_Table_Abstract 的表类。在模型中,我尝试使用 join() 方法并基于这样的表 ID 返回单行:

        $getCategoryResults = $this->select();
        $getCategoryResults->setIntegrityCheck(false)
                           ->from(array('c'=> 'categories', '*'))
                           ->join(array('e' => 'events'),'c.events_idEvent = e.idEvent', array())
                            ->where("e.idEvent = ?", $idEvent);

当我回显 sql 对象时,我得到了这个:

SELECT `c`.* FROM `categories` AS `c` 
INNER JOIN `events` AS `e` ON c.events_idEvent = e.idEvent 
WHERE (e.idEvent = '1')

奇怪的是,如果我使用这种格式,

->where("e.idEvent = $idEvent");

我的输出是“WHERE(e.idEvent = 1)”。该值未包含在刻度中,但似乎都适用于 MySQL。当我在 phpMyAdmin 中运行查询时,我得到了这个:

idCategory 类型 displayOrder 描述 localStartTime events_idEvent
1 个人 1 5k 跑步/步行 2010-02-18 23:59:59 1
2 团队 2 5k 团队类别 2010-02-18 23:59:591 1

这是我期望看到的。但是当我在浏览器中运行我的应用程序时,我得到了这样的丑陋:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'SELECT c.* FROM categoriesAS cINNER JOIN eventsAS eON c.events_id'附近使用正确的语法

我已经检查了我能想到的所有资源。希望 SO 超级专家的联合令人敬畏将使它成为我的最后一站。:D

4

2 回答 2

1

查看错误声明的第二部分。如果 mysql 在其他地方,很可能是关于访问冲突。

于 2010-02-05T15:52:49.720 回答
1

由于我不知道的原因,该应用程序认为我的 $pageResult 变量没有设置。在将 isset() 添加到如下代码后,我发现了这一点:

        try {
        $getCategoryResults = $this->select();
        $getCategoryResults->setIntegrityCheck(false)
                           ->from(array('c'=> 'categories', '*'))
                           ->join(array('e' => 'events'),'c.events_idEvent = e.idEvent', array())
                            ->where("e.idEvent = ?", $idEvent);

          if (isset($pageResult)) {
            $pageResult .= $getCategoryResults;
          }
          else {
            $pageResult = $getCategoryResults;
          }

    } catch (Exception $e) {
        echo ( "Could not find matching categories for event id = $idEvent");
    }

问题消失了,这当然揭示了潜伏在它背后的下一个问题。:D

于 2010-02-05T19:14:15.193 回答