这是我第一次尝试在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);";
答案 0 :(得分:0)
我认为MDB2可能会以某种方式改变您的查询。因此,要找到它,您需要记录正在数据库中执行的查询(请查看:http://dev.mysql.com/doc/refman/5.1/en/query-log.html和How to show the last queries executed on MySQL?)。
答案 1 :(得分:0)
...好吧我发现问题是什么:我不能一次执行多个句子。我不得不将它们分成单个句子,然后按顺序执行它们:
$statements = explode(";", $query);
foreach($statements as $stat)
if (isset($stat) && $stat!=='') $db->exec($stat);