【问题标题】:Laravel query errorLaravel 查询错误
【发布时间】:2018-05-21 19:21:53
【问题描述】:

laravel 在执行此行时返回此错误:

    $select = trim($request->select);
    $where = trim($request->where);
    $d = trim($request->d);
    $order = trim(stripslashes($request->order));
    $limit = isSet($request->limit) ? " LIMIT ".trim($request->limit) : '';
    $forUser = trim(stripslashes($request->userId));
    $campaignId = trim(stripslashes($request->campaignId));
    $userRole = trim(stripslashes($request->userRole));

$events = DB::select('SELECT *, DATE_FORMAT(timestamp, ?) selector FROM events WHERE DATE_FORMAT(timestamp, ?) = ? AND campaignId = ? ORDER BY ? ASC ?', [$select, $where, $d, $campaignId, $order, $limit])->get();

错误:

[2018-05-21 19:09:22] local.ERROR: exception 'PDOException' with message 'SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在“?”附近使用的正确语法。在 C:\xampp\htdocs\spotlike_laravel\trunk\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOConnection.php:77 中的第 1 行

有什么想法吗? :(

【问题讨论】:

  • 您知道您传递的所有这些变量是否都有一些数据吗?出于调试原因,如果可以的话,我会尝试在 Laravel 之外执行 SQL,以便您隔离问题。
  • 当我查看您的变量和查询中的问号时,您的查询中似乎漏掉了 LIMIT 关键字。
  • 我找到了查询,但是当我在 phpmyadmin 中运行它时它不会返回错误,查询如下所示:SELECT *, DATE_FORMAT(timestamp, "%Y-%c-%e")选择器 FROM 事件 WHERE DATE_FORMAT(timestamp, "%Y-%c") = "2018-5" AND campaignId = "194" ORDER BY timestamp, id ASC
  • 将此作为答案发布,但没有用!将作为评论发布以可能在将来帮助某人:尝试将时间戳字段名称放在反引号中。 IIRC 时间戳是一个保留字。另外,作为旁注,我不知道您是否可以将绑定参数用于 order by 和 limit 参数,因为 PDO 会将参数值用引号括起来,导致类似:ORDER BY 'some_field' ASC 'LIMIT 30'
  • 要获取查询和绑定,试试这个:$events = DB::select('SELECT *, DATE_FORMAT(timestamp, ?) selector FROM events WHERE DATE_FORMAT(timestamp, ?) = ? AND campaignId = ? ORDER BY ? ASC ?', [$select, $where, $d, $campaignId, $order, $limit]); dd($event->toSql(), $event->getBindings()); 这将dd 查询和传递的参数。可能会更清楚地说明这个问题。

标签: sql laravel eloquent


【解决方案1】:

问题解决了,变量“$limit”为空,然后在$limit 的连接上生成一个空格在查询上。谢谢 darol 和 Phil!

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 2021-05-28
    • 1970-01-01
    相关资源
    最近更新 更多