我在想什麼可能是不可能的,我不確定。這是我的情況:使用自動遞增鍵插入多個表格
我整理了一個課程項目,讓老師爲學生創建測驗。在PHP中,測試問題/答案被輸入到數據庫中,我使用mysqli準備好的語句。由於我使用的問題/答案IDS將其鏈接我把它就像這樣:
$q_stmt = $db -> prepare('query with no correct_answer_id')
$a_stmt = $db -> prepare('query with ? = $q_stmt -> insert_id')
$a_stmt -> bind_params($q_id)
$q_update = $db -> prepare('query with ? = $a_stmt -> insert_id for correct answer')
$q_update -> bind_params($correct_answer_id)
,然後腳本循環,如:
foreach ($question)
$q_stmt -> execute()
$q_id = $db -> insert_id
foreach ($answers)
$a_stmt -> execute()
id (correct_answer) $correct_answer_id = $db -> insert_id
$q_update -> execute()
現在,這工作我的筆記本電腦( Mac OS X.6與最新(截至1月)PHP和MySQL),但是當我上傳我的項目的另一部分,也使用嵌套預準備語句到我的網絡服務器時,我收到一條錯誤消息,說它不喜歡我的嵌套。它說:
警告:mysqli的準備::()[mysqli.prepare]:所有的數據必須在新的語句之前準備中獲取發生在根/路徑/文件名上線124 .PHP
因此,我認爲嵌套準備語句必須是一件壞事?這是非常不幸的,因爲我真的很喜歡我把它們放在一起。
作爲替代,我能遍歷所有收集ID,然後再做循環上的問題和答案也收集ID,然後循環又一個更多的時間來更新的問題,但似乎想了很多問題爲服務器額外的工作,我喜歡嘗試高效。
這就是說,我正在尋找兩件事之一。
1 - 通過奇蹟有一種方法來運行我的查詢在一步
a - 我會喜歡一個解決方案,允許問題/正確答案對插入一次,然後循環以後的可變數量不正確的答案也是相關的問題
2 - 一種方法來改變我的Web服務器(我已經完全進入cpannel),使得它不再恨我的嵌套預處理語句提前
你可能是正確的。當我正在處理另一個數據庫函數時,我注意到我忘記調用$ stmt - > close()來執行一個已經在頁面上執行過的語句,這個語句可能是罪魁禍首。 – baiano 2011-04-06 08:02:05
我會考慮[mysqli_stmt :: free_result](http://www.php.net/manual/en/mysqli-stmt.free-result。php)作爲一種替代方案,如果你已經完成了數據,因爲它將會在資源上更輕。 – Joshua 2012-03-30 22:24:33