2014-01-16 162 views
0

這是我第一次嘗試在mySQL數據庫上使用PHP運行查詢。 考慮我有一個像這樣創建的有效MDB2 db對象:$db = MDB2::connect(...多語句查詢mySQL/PHP

欲執行查詢($query)所示:

SET @node_id := (SELECT cp_node_id FROM ilias.cp_item AS T1 WHERE id="ITEM-2008-11-28-8-6-5-281"); 
SET @id := (SELECT cmi_node_id FROM ilias.cmi_node AS T2 WHERE user_id=189 AND [email protected]_id); 
SET @id = ifnull(@id, (SELECT MAX(cmi_node_id) FROM ilias.cmi_node AS T2)+1); 
SET @id = ifnull(@id, 0); 

INSERT INTO ilias.cmi_node 
(cmi_node_id, user_id, cp_node_id, completion_status, 
learner_name, progress_measure, success_status, scaled, c_timestamp) 
VALUES 
(@id, 189, @node_id, "completed", 
"Luca Viggiani", 1.0, "passed", NULL, NOW()) 

ON DUPLICATE KEY UPDATE 
completion_status=VALUES(completion_status), 
learner_name=VALUES(learner_name), 
progress_measure=VALUES(progress_measure), 
success_status=VALUES(success_status), 
c_timestamp=VALUES(c_timestamp); 

假設上述文本在$query,我tryed

$db->exec($query); 

$db->extended->executeMultiple($query); 

但沒有作品。

請考慮上述查詢在MySQL Workbench中正常工作。也請考慮thsat從PHP這樣運行一個簡單的(單語句)查詢,它工作太細:

$db->exec("INSERT INTO ilias.cmi_node (cp_node_id) VALUES (5);"); 

編輯: 也是這樣一個簡單的(兩個語句)查詢在PHP中失敗,並在工作MySQLWOrkBench:

$query2 = "SET @node_id := (SELECT cp_node_id FROM ilias.cp_item AS T1 WHERE id='ITEM-2008-11-28-8-6-5-281');". 
        " INSERT INTO ilias.cmi_node (cp_node_id) VALUES (@node_id);"; 
+1

你得到的錯誤是什麼? –

+0

對我來說調試並不容易,因爲代碼會留在java所消耗的soap web服務中。 BTW $ db-> exec給我1作爲結果 – lviggiani

回答

0

...好吧我發現了什麼問題:我不能一次執行多個句子。我不得不將它們分成單句,然後像這樣順序執行它們:

$statements = explode(";", $query); 

foreach($statements as $stat) 
    if (isset($stat) && $stat!=='') $db->exec($stat); 
+0

但這會產生開銷,除非您在最後提交查詢。 – Soosh

+0

你是指在foreach循環之後還是在每個$ db-> exec()之後? – lviggiani