2011-05-14 103 views
1

與在PHP中一樣,使用mysql_query()不支持多個查詢,我如何將以下代碼轉換爲唯一查詢?PHP/MySQL中的多個查詢替換

我確切地說我無法將數據庫更改爲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); 

任何幫助將不勝感激。

此致敬禮。

UPDATE:

回答我自己的問題,我發現鏈接:http://www.dev-explorer.com/articles/multiple-mysql-queries在這裏筆者expalins如何做到這一點。

對於我來說,並按照他的解釋,代碼變爲:

$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

爲什麼不只是運行多個'mysql_query()'命令? – JohnP 2011-05-14 07:16:17

+0

@JohnP,他不能運行多個命令,因爲他需要使用其他人的結果。 – itsols 2011-05-14 07:23:03

+0

@JohnP:這就是爲什麼我需要一個單一的查詢,正如其所說的。 – mlh 2011-05-14 07:26:07

回答

2

解決方案是使用transactions,因此您可以分別執行這些查詢,但它們將被視爲一個。例如,上面的例子需要4個mysql_query()命令,但是mysql會將整個事件作爲一個查詢來執行;

+0

錯了,這是不安全的併發訪問... – peufeu 2011-05-14 08:35:56

+0

嗯,交易是什麼? – SimonQuest 2011-05-14 08:45:33

+1

這取決於你設置的默認事務隔離級別... – peufeu 2011-05-14 08:58:54