PHP / MySQL中的多个查询替换

时间:2011-05-14 07:11:15

标签: 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);
} 

我已经过测试,效果很好。

我们可以认为问题已经解决,除非你们中的一个人有更好的解决方案。

1 个答案:

答案 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将作为一个查询执行整个事务;