PHP / MySQL中的多个查询替换


Multiple query substitution in PHP / MySQL

在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 会将整个事情作为一个查询执行;