我與表「book authors」鏈接的兩個表(作者和書籍)。更新mysqlDB的函數在foreach循環中不起作用
「書籍作者」表包含BookAuthorID,AuthorID和BookID,這意味着我可以擁有來自同一作者等的多本書籍,並且匹配它們是一件輕而易舉的事情。
不幸的是,我搞砸了作者表的ID字段,並創建了一個新的主鍵和自動增量。現在我需要使用新的ID填充「書籍作者」表中的匹配列,並將它們與舊的匹配。
我有以下功能更新「一書的作者」表...
function update_id($BookAuthorID, $NewAuthorID) {
$result = mysql_query("UPDATE `book authors` SET NewAuthorID='$NewAuthorID' WHERE BookAuthorID='$BookAuthorID'") or trigger_error(mysql_error()); }
我知道此功能工作原理我已經用函數和兩個例如,創建一個空白頁測試它變量($ BookAuthorID,$ NewAuthorID)並正確更新了表。
現在我有以下的代碼,發現每個作者的每個實例,然後在每本書foreach循環的ID匹配...
$result = mysql_query("SELECT * FROM authors");
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$AuthorID= $row["AuthorID"];
$match = get_books($BookID);
foreach ($match as $value) {
update_id($value["BookAuthorID"], $value["NewAuthorID"]);
}
}
的get_books功能如下,並適用於其餘該網站的...
function get_books($id) {
$result = mysql_query("SELECT * FROM `book authors` WHERE AuthorID= $id") or trigger_error(mysql_error());
$array = array();
while($row_ids = mysql_fetch_assoc($result)){
$array[] = $row_ids;
}
return $array;
}
我無法弄清楚,爲什麼函數工作foreach循環之外,但什麼都不做內(不會生成錯誤)。
嘗試回顯爲您的UPDATE查詢生成的SQL - 它看起來應該如何?它在數據庫中運行時是否工作? – andrewsi
切換到PDO,返回結果集,你可以直接迭代它們。這應該會減少你的代碼量,也可能幫助你找到錯誤。此外,如果某些特定功能無法使用,則需要進行故障排除。函數實際上是否被調用?我沒有看到可以證明這一點的日誌記錄功能。 – hakre
你在哪裏設置'$ BookID'?我的猜測是'$ BookID'是空的,'$ match'填充了一個空數組,並且foreach循環從不迭代,因爲沒有什麼可以迭代。 – Jrod