多语句查询mySQL / PHP

时间:2014-01-16 12:19:10

标签: php mysql

这是我第一次尝试在mySQL数据库上使用PHP运行查询。 考虑我有一个有效的MDB2 db对象,如下所示:$db = MDB2::connect(...

我想执行这样的查询($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 cp_node_id=@node_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,我尝试了

$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);";

2 个答案:

答案 0 :(得分:0)

我认为MDB2可能会以某种方式改变您的查询。因此,要找到它,您需要记录正在数据库中执行的查询(请查看:http://dev.mysql.com/doc/refman/5.1/en/query-log.htmlHow to show the last queries executed on MySQL?)。

答案 1 :(得分:0)

...好吧我发现问题是什么:我不能一次执行多个句子。我不得不将它们分成单个句子,然后按顺序执行它们:

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

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