Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用laravel使用多语句执行原始sql查询_Php_Mysql_Laravel - Fatal编程技术网

Php 如何使用laravel使用多语句执行原始sql查询

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

无论如何,我都可以使用laravel框架使用下面的语句执行查询。 我曾尝试使用
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;');