在PHP中,使用mysql_query()不支持多个查询,如何将以下代码转换为唯一查询?
我确切地说我无法将我的数据库更改为MySQLi或其他任何内容。
SELECT @myLeft := lft FROM hierarchie WHERE id = ".$father_id.";
UPDATE hierarchie SET rgt = rgt+2 WHERE rgt > @myLeft;
UPDATE hierarchie SET lft = lft+2 WHERE lft > @myLeft;
INSERT INTO hierarchie VALUES(".$cat.", ".$id.", '".$fullindi."', @myLeft+1, @myLeft+2);
任何帮助都会非常感激。
最好的问候。
更新:
回答我自己的问题,我找到了链接:http://www.dev-explorer.com/articles/multiple-mysql-queries,作者在此处展示了如何做到这一点。
对我而言,按照他的解释,代码变为:
$sql = "
SELECT @myLeft := lft FROM hierarchie WHERE id = ".$father_id.";
UPDATE hierarchie SET rgt = rgt + 2 WHERE rgt > @myLeft;
UPDATE hierarchie SET lft = lft + 2 WHERE lft > @myLeft;
INSERT INTO hierarchie VALUES(".$cat.", ".$id.", '".$fullindi."', @myLeft + 1, @myLeft + 2);
";
$queries = preg_split("/;+(?=([^'|^\\\']*['|\\\'][^'|^\\\']*['|\\\'])*[^'|^\\\']*[^'|^\\\']$)/", $sql);
foreach ($queries as $query){
if (strlen(trim($query)) > 0) mysql_query($query);
}
我已经过测试,效果很好。
我们可以认为问题已经解决,除非你们中的一个人有更好的解决方案。
答案 0 :(得分:2)
解决方案是使用transactions,以便您可以单独执行这些查询,但它们将被视为一个。
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
因此,例如,上面的示例将需要4个mysql_query()命令,但mysql将作为一个查询执行整个事务;