我有一个查询,我可以在phpmyadmin中运行,没有任何错误,它返回的记录是真的。
LOCK TABLE menu WRITE;
SELECT @myLeft := lft FROM menu
WHERE name = 'myName';
UPDATE menu SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE menu SET lft = lft + 2 WHERE lft > @myLeft;
INSERT INTO menu(name, lft, rgt);
VALUES('new name', @myLeft + 1, @myLeft + 2);
UNLOCK TABLES";
但是当我想要运行我的PHP代码时,有一些错误: synax是真的吗?
<?php
$name = "FRS";
$parent = "QQQQQQQQ";
$query = $this->db->query("LOCK TABLE menu WRITE
SELECT @myLeft := lft FROM menu
WHERE name = ?
UPDATE menu SET rgt = rgt + 2 WHERE rgt > @myLeft
UPDATE menu SET lft = lft + 2 WHERE lft > @myLeft
INSERT INTO menu(name, lft, rgt)
VALUES(?, @myLeft + 1, @myLeft + 2)
UNLOCK TABLES",
array($name, $parent));
if($query)
return true;
?>
我也使用分号,就像我在phpmyadmin中运行的查询一样。
答案 0 :(得分:1)
不确定PHP,但您应该考虑像下面的过程一样运行SQL代码。另外,要指出插入查询中有一个额外的分号;
,如下所示
INSERT INTO menu(name, lft, rgt);
<--Here
VALUES('new name', @myLeft + 1, @myLeft + 2);
程序正文
delimiter $$
create procedure sp_dowork
as
begin
LOCK TABLE menu WRITE;
SELECT @myLeft := lft FROM menu WHERE name = 'myName';
UPDATE menu SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE menu SET lft = lft + 2 WHERE lft > @myLeft;
INSERT INTO menu(name, lft, rgt)
VALUES('new name', @myLeft + 1, @myLeft + 2);
UNLOCK TABLES;
end$$
delimiter ;
然后相应地在您的应用程序代码中调用您的程序