运行此查询时返回false

时间:2011-08-17 15:33:00

标签: php mysql

为什么这不起作用?当我将查询打印到屏幕并通过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);

4 个答案:

答案 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(至少我上次检查过)