【问题标题】:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;
【发布时间】:2016-11-30 07:57:48
【问题描述】:

我正在使用以下查询,但是当它运行时出现 mysql 语法错误。我正在使用 cakephp 3 框架。错误正在为这种情况生成 ->where([DATE('Bookings.created') => date("Y-m-d")]),所以你能建议如何避免这个问题。

$this->loadModel('ServiceManager.Bookings');
            $queryTodayAppointment = $this->Bookings->find('all')
                ->select(['Users.fullname', 'Bookings.slot_time'])
                ->where([DATE('Bookings.created') => date("Y-m-d")])
                ->contain(['Users'])
                ->order(['Bookings.id' => 'DESC'])
                ->limit(5);

【问题讨论】:

    标签: mysql date cakephp-3.0


    【解决方案1】:

    假设您实际上必须使用 DATE 函数,那么有很多方法可以实现这一点。

    最简单的一个(这就是您已经尝试做的,但您只是忘记引用函数)

    ->where(["DATE(Bookings.created)" => date("Y-m-d")])
    

    但您也可以使用 cake SQL 函数 (reference)

    $query = $this->Bookings->find();
    $date = $query->func()->date(['Bookings.created' => 'identifier']);
    $query->select(['Users.fullname', 'Bookings.slot_time'])
        ->where(function ($exp, $q) use($date) {
            return $exp->eq($date, date("Y-m-d"));
        })
        ->contain(['Users'])
        ->order(['Bookings.id' => 'DESC'])
        ->limit(5);
    

    【讨论】:

    • 通过使用 ->where(["DATE('Bookings.created')" => date("Y-m-d")]) ,SQL 正在运行,但我没有获取数据。有关详细信息,创建的字段类型为 DateTime。所以我想要今天创建的那些数据。
    • 抱歉,有一个错字。我忘了删除单引号。我要编辑
    【解决方案2】:

    您不需要在这里使用 DATE() 函数。只需将数据与当前日期进行比较即可:

    ->where(['Bookings.created' => date("Y-m-d")])
    

    【讨论】:

    • 它们不等价。 DATE() 剥离 Bookings.created 中的任何时间组件。
    • 我的错,忘了是 DATETIME。
    猜你喜欢
    • 1970-01-01
    • 2020-03-02
    • 2019-08-08
    • 1970-01-01
    • 2020-05-03
    • 2020-02-15
    • 2013-06-27
    • 2022-01-11
    相关资源
    最近更新 更多