在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);
}
我已经测试过了,效果很好。
我们可以认为问题已经解决,除非你们中的一个人有更好的解决方案。
解决方案是使用事务,以便您可以单独执行这些查询,但它们将被视为一个查询。
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
因此,例如,上面的例子将需要 4 个 mysql_query() 命令,但 mysql 会将整个事情作为一个查询执行;