【问题标题】:Doctrine 1.2 can not fetch data?Doctrine 1.2 无法获取数据?
【发布时间】:2015-03-27 17:11:08
【问题描述】:

我正在尝试执行这样的查询

$conn = Doctrine_Manager::connection()->getDbh();
        $query = "SET @sql = NULL;
                    SELECT
                      GROUP_CONCAT(DISTINCT
                        CONCAT(
                          'GROUP_CONCAT(IF(DATE(punch_in_user_time) = ', QUOTE(DATE(punch_in_user_time)), ', TIME(punch_in_user_time), NULL)) AS ', QUOTE(DATE(punch_in_user_time)),
                          ',GROUP_CONCAT(IF(DATE(punch_out_user_time) = ', QUOTE(DATE(punch_in_user_time)), ', TIME(punch_out_user_time), NULL)) AS ', QUOTE(DATE(punch_in_user_time))
                        ) ORDER BY punch_in_user_time
                      ) INTO @sql
                    FROM ohrm_attendance_record
                    where DATE(punch_in_user_time) between QUOTE(" . $fromDate .") and QUOTE(" . $toDate . ")
                    ORDER BY punch_in_user_time ;

                    SET @@group_concat_max_len = 10000;
                    SET @sql = CONCAT('select emp_number, ', @sql, 
                    ' from hs_hr_employee e LEFT JOIN ohrm_attendance_record a ON a.employee_id = e.emp_number group by emp_number 
                    where true '); 
                    PREPARE stmt FROM @sql;
                    EXECUTE stmt;
                    DEALLOCATE PREPARE stmt;";

        $statement = $conn->query($query);
        return $statement->fetchAll(PDO::FETCH_ASSOC);

但是会出现这样的错误

01/28/15 18:08:41,494 [3268] ERROR filter.ExceptionCatcherFilter - Uncaught Exception: exception 'PDOException' with message 'SQLSTATE[HY000]: General error' in C:\xampp\htdocs\orangehrm\symfony\plugins\orangehrmAttendancePlugin\lib\dao\AttendanceDao.php:553

查询在 MySQL 上完美运行,我的代码有什么问题?

请帮忙!

【问题讨论】:

  • 我正在尝试使用 $statement = $conn->prepare($query);但仍然没有运行
  • 你真的需要通过准备好的声明来做到这一点吗?

标签: mysql doctrine symfony1


【解决方案1】:

尝试将每个单独的声明分别发送到学说。
对于不返回结果的语句(如 SET)也可以使用 exec()。

试试这样的:

$conn = Doctrine_Manager::connection()->getDbh();
$query = "SET @sql = NULL;";
$conn->exec($query);
$query = "SELECT
            GROUP_CONCAT(DISTINCT
             CONCAT(
               'GROUP_CONCAT(IF(DATE(punch_in_user_time) = ', QUOTE(DATE(punch_in_user_time)), ', TIME(punch_in_user_time), NULL)) AS ', QUOTE(DATE(punch_in_user_time)),
               ',GROUP_CONCAT(IF(DATE(punch_out_user_time) = ', QUOTE(DATE(punch_in_user_time)), ', TIME(punch_out_user_time), NULL)) AS ', QUOTE(DATE(punch_in_user_time))
               ) ORDER BY punch_in_user_time
             ) INTO @sql
             FROM ohrm_attendance_record
             WHERE DATE(punch_in_user_time) between QUOTE(" . $fromDate .") and QUOTE(" . $toDate . ")
             ORDER BY punch_in_user_time ;";
$conn->exec($query);
$query = "SET @@group_concat_max_len = 10000;";
$conn->exec($query);
$query = "SET @sql = CONCAT('select emp_number, ', @sql, 
                         ' from hs_hr_employee e LEFT JOIN ohrm_attendance_record a ON a.employee_id = e.emp_number group by emp_number 
                        where true ');";
$conn->exec($query);
$query = "PREPARE stmt FROM @sql;";
$conn->exec($query);
$query = "EXECUTE stmt;";
$statement = $conn->query($query);
$query = "DEALLOCATE PREPARE stmt;";
$conn->exec($query);

return $statement->fetchAll(PDO::FETCH_ASSOC);

我认为它应该按原样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多