php - Zend db PDO 不返回结果

标签 php mysql zend-framework pdo

我有以下问题:

$sql = "SELECT e.*, c.name city_name, u.*, IF(l.item IS NULL, 0, 1) as iLike, DATE_FORMAT(e.date, '%h:%i') hour, DATE_FORMAT(e.date, '%d/%c/%Y') day,  DATE_FORMAT(e.date, '%c') month
FROM `events` e
LEFT OUTER JOIN `like` l ON l.item = e.uuid AND l.user = :user
            LEFT OUTER JOIN city c ON c.city = e.city
            LEFT OUTER JOIN user u ON u.user = e.user
            WHERE
             e.deleted = 0
            AND DATE(e.date) >= CURDATE()
            AND e.user = :user
            ORDER by e.date ASC
            ";
    $select = $eventsModel->getAdapter();
    $select->setFetchMode(Zend_Db::FETCH_ASSOC);
    $prepare = $select->query($sql, array('user'=>$this->user_id));

如果我将 :user 硬编码到查询中,此代码将返回结果。示例:

$sql = "SELECT e.*, c.name city_name, u.*, IF(l.item IS NULL, 0, 1) as iLike, DATE_FORMAT(e.date, '%h:%i') hour, DATE_FORMAT(e.date, '%d/%c/%Y') day,  DATE_FORMAT(e.date, '%c') month
            FROM `events` e
            LEFT OUTER JOIN `like` l ON l.item = e.uuid AND l.user = 23
            LEFT OUTER JOIN city c ON c.city = e.city
            LEFT OUTER JOIN user u ON u.user = e.user
            WHERE
             e.deleted = 0
            AND DATE(e.date) >= CURDATE()
            AND e.user = 23
            ORDER by e.date ASC
            ";
    $select = $eventsModel->getAdapter();
    $select->setFetchMode(Zend_Db::FETCH_ASSOC);
    $prepare = $select->query($sql);

当我们将代码移至新服务器时,这种情况才开始发生, 新操作系统是 Debian 6、squeze、mysql 5.5、PHP 5.3.21。

谢谢,

最佳答案

使用 ? 代替 :user,使用 $this->user_id 代替 array('user'=>$this ->user_id)

此外,您无法在JOIN语句中绑定(bind)数据,因此l.user = e.user

$sql = "SELECT e.*, c.name city_name, u.*, IF(l.item IS NULL, 0, 1) as iLike, DATE_FORMAT(e.date, '%h:%i') hour, DATE_FORMAT(e.date, '%d/%c/%Y') day,  DATE_FORMAT(e.date, '%c') month
            FROM `events` e
            LEFT OUTER JOIN `like` l ON l.item = e.uuid AND l.user = e.user
            LEFT OUTER JOIN city c ON c.city = e.city
            LEFT OUTER JOIN user u ON u.user = e.user
            WHERE
             e.deleted = 0
            AND DATE(e.date) >= CURDATE()
            AND e.user = ?
            ORDER by e.date ASC
            ";
    $select = $eventsModel->getAdapter();
    $select->setFetchMode(Zend_Db::FETCH_ASSOC);
    $prepare = $select->query($sql, array($this->user_id));

关于php - Zend db PDO 不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838447/

相关文章:

zend-framework - 使用 zend acl 显示页面未找到错误

PHP if 值 [...] 显示 :none in selectbox

php - 如何通过格式错误的列选择行

php - 如何从数据库中同时在两个输入字段上显示相同的序列号

mysql - 如何删除有数字的mysql数据库

Mysql错误代码: 1292 Incorrect datetime value : ''

mysql - 如何在wordpress数据库中插入查询

zend-framework - 移除验证器并在 Controller 中将 required 设置为 false

php,通过使用gzcompress 防止mysql 注入(inject)?

zend-framework - Zend - 如何禁用给定 Action 的布局?