2011-08-17 91 views
0

爲什麼這不起作用的任何原因?當我將查詢打印到屏幕上並通過phpMyAdmin運行時,它可以正常工作。我遺漏了連接到數據庫的部分(MySQL)。運行此查詢時返回false

$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); 
+1

您需要添加一些錯誤處理,告訴您如果不起作用會出現什麼問題。這就是通常的做法。由於我們不知道所有這些變量包含的內容,因此目前無法給出有意義的答案 –

+0

如果執行'echo $ query',會得到什麼結果?什麼是MySQL錯誤信息? – JJJ

+0

您使用的是PDO嗎? –

回答

1

看起來你正試圖運行多個語句,可能通過mysql_query()mysqli->query()只支持單語句。相反,您需要使用mysqli->multi_query()mysql_multi_query()執行此操作。

0

您試圖通過創建一個包含它們的字符串並將其發送到數據庫來運行多個查詢。它看起來像你的數據庫對象不支持,你可以運行多個查詢的唯一方法是使用mysqli的multi_query函數。

但是,有一個缺點 - 如果交易沒有提交?如果有錯誤怎麼辦?回滾和錯誤消息在哪裏?

PDO將作爲我的選擇,與try/catch塊,我會創建一個準備好的聲明,而不是一個包含所有查詢的大字符串。它不僅更優雅,而且更容易調試。

0

的mysql_query不支持多個查詢

檢查this php manual comment獲取更多信息。簡而言之。你應該調用$ db-> query而不是附加到$ query。

注意。交易只適用於innodb(至少上次我檢查)