一个Mysql语法错误。我怎么解决这个问题?

时间:2014-10-25 21:10:33

标签: php mysql syntax-error

我有一个查询,我可以在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中运行的查询一样。

1 个答案:

答案 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 ;

然后相应地在您的应用程序代码中调用您的程序