Php 如何使用laravel使用多语句执行原始sql查询
无论如何,我都可以使用laravel框架使用下面的语句执行查询。 我曾尝试使用Php 如何使用laravel使用多语句执行原始sql查询,php,mysql,laravel,Php,Mysql,Laravel,无论如何,我都可以使用laravel框架使用下面的语句执行查询。 我曾尝试使用DB::statement,但返回了一个sql语法错误,但是当我在phpmyadmin上执行相同的查询时,它非常令人沮丧。 请帮帮我 如 DB::unprepared()应该可以做到这一点,laravel会为sql查询做一些准备和工作。但是您可以使用DB::unprepared使用完全原始的查询 例如 DB::unprepared('LOCK TABLE topics WRITE; SELECT @pRgt := r
DB::statement
,但返回了一个sql语法错误,但是当我在phpmyadmin上执行相同的查询时,它非常令人沮丧。
请帮帮我
如
DB::unprepared()
应该可以做到这一点,laravel会为sql查询做一些准备和工作。但是您可以使用
DB::unprepared
使用完全原始的查询 例如
DB::unprepared('LOCK TABLE topics WRITE;
SELECT @pRgt := rgt FROM topics WHERE id = ?;
UPDATE topics SET lft = lft + 2 WHERE rgt > @pRgt;
UPDATE topics SET rgt = rgt + 2 WHERE rgt >= @pRgt;
INSERT INTO topics (title, overview, article, image, lft, rgt)
VALUES (?, ?, ?, ?, @pRgt, @pRgt + 1);
UNLOCK TABLES;');
无论是单语句还是多语句,它都会执行整个SQL查询。我认为需要使用7个
DB::statement
调用,每个语句调用一个。非常感谢,但不幸的是,此方法不会绑定DB::unprepared('select*from table where id=:id',['id'=>1]等值)将抛出一个sql错误。是的,这就是为什么它被称为unprepared:)因此您不能使用prepared语句您可以尝试另一种方法尝试将所有参数分组到一个数组中,将查询视为字符串,用数组中相应的参数依次替换“?”,然后将字符串发送到DB::unprepared方法:)
DB::unprepared('LOCK TABLE topics WRITE;
SELECT @pRgt := rgt FROM topics WHERE id = ?;
UPDATE topics SET lft = lft + 2 WHERE rgt > @pRgt;
UPDATE topics SET rgt = rgt + 2 WHERE rgt >= @pRgt;
INSERT INTO topics (title, overview, article, image, lft, rgt)
VALUES (?, ?, ?, ?, @pRgt, @pRgt + 1);
UNLOCK TABLES;');