这是我第一次尝试在 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 中运行良好。另外请考虑像这样从 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);";
最佳答案
我认为 MDB2 可能以某种方式改变了您的查询。因此,要找到它,您需要记录数据库中正在执行的查询(看看: http://dev.mysql.com/doc/refman/5.1/en/query-log.html 和 How to show the last queries executed on MySQL? )。
关于php - 多语句查询 mySQL/PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21161595/