首页 > 解决方案 > Laravel 5 DB::statement return SQLSTATE[42000]: 语法错误或访问冲突:1064 你的 SQL 语法有错误;查看

问题描述

这是声明:

    $statement = "CREATE TEMPORARY TABLE homestead.temp_table
        AS
        SELECT title,content, feed, link, 'date', created_at, updated_at FROM homestead.news ORDER BY 'date' ASC LIMIT 5;
        TRUNCATE homestead.news;
        INSERT INTO homestead.news (title, content, feed, link, 'date', created_at, updated_at)
        SELECT title, content, feed, link, 'date', created_at, updated_at FROM homestead.temp_table;
        DROP TEMPORARY TABLE homestead.temp_table;";

            try {
                DB::statement($statement);
            } catch (\Exception $e) {
                echo $e->getMessage();
            }

代码在 Mysql Workbench 中工作,但不在 laravel 中。请帮忙,这是我在 Stackoverflow 上的第一个问题 :)

完整错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRUNCATE homestead.news; INSERT INTO homestead.news (title, content, feed, l' at line 4 (SQL: CREATE TEMPORARY TABLE homestead.temp_table AS SELECT title,content, feed, link, `date`, created_at, updated_at FROM homestead.news ORDER BY `date` ASC LIMIT 5; TRUNCATE homestead.news; INSERT INTO homestead.news (title, content, feed, link, `date`, created_at, updated_at) SELECT title, content, feed, link, `date`, created_at, updated_at FROM homestead.temp_table; DROP TEMPORARY TABLE homestead.temp_table;)

标签: mysqlsqllaravel-5

解决方案


解决方案是将 DB::statement 更改为 DB::unprepared。

更多信息在这里:

Laravel 的原始 SQL 函数之间的区别


推荐阅读