为什么这不起作用?当我将查询打印到屏幕并通过phpMyAdmin运行时,它可以工作。我遗漏了连接数据库(MySQL)的部分。
$query = "START TRANSACTION; ";
$query .= "INSERT INTO table1(text) VALUES('$question_description'); ";
for ($i = 0; $i < count($processed_answers); $i++) {
$query .= "INSERT INTO table2(question_id, text, serial_number, is_correct) ".
"VALUES($question_id, '".$processed_answers[$i]."', '".$serial_numbers[$i]."', 0); ";
}
foreach($categories as $category) {
$query .= "INSERT INTO table3 VALUES($question_id, $category); ";
}
$query .= "COMMIT; ";
$result = $db->query($query);
答案 0 :(得分:1)
看起来您正在尝试运行多个语句,可能通过仅支持单个语句的mysql_query()
或mysqli->query()
。相反,您需要使用mysqli->multi_query()
或mysql_multi_query()
执行此操作。
答案 1 :(得分:0)
您尝试一次运行多个查询,您应该一次运行一个查询或使用mysqli::multi_query方法。
答案 2 :(得分:0)
您尝试通过创建包含它们的字符串来运行多个查询,然后将其发送到数据库。看起来你的数据库对象不支持它,并且你可以运行多个查询的唯一方法是使用mysqli的multi_query
函数。
但是,有一个缺点 - 如果事务没有提交怎么办?如果有错误怎么办?回滚和错误消息在哪里?
PDO将是我的选择,使用try / catch块,我将创建一个我发送的预准备语句,而不是包含所有查询的大字符串。它不仅更优雅,而且更容易调试。
答案 3 :(得分:0)
mysql_query不支持多个查询
查看this php manual comment了解详情。简而言之。你应该调用$ db-&gt;查询而不是附加到$ query。
请注意。交易仅适用于innodb(至少我上次检查过)