2012-12-03 81 views
0

我得到了兩張表。一個是賬戶,另一個是興趣。 一個帳號可以有多個興趣點,可以編輯。 現在,該過程正在刪除該帳戶的所有興趣,然後插入這些趣事。 查詢是:刪除後PHP MySQL插入失敗

「DELETE FROM興趣WHERE ACCOUNT_ID = '$ ID'」

「INSERT INTO興趣(ACCOUNT_ID,INTEREST_NAME)VALUES( '$ ID', '$名')」

當用戶更新他們的帳戶時,我使用了這兩個查詢,但是插入失敗,沒有任何插入表(ps。這個interest_id是auto_increment,這是被計數的),但是表中沒有新內容。當我註釋掉刪除查詢時。插入將會成功。

有誰知道我能做什麼?

+0

是'account_id' auto_increment字段什麼的?或受到其他限制? –

+0

因爲每個賬戶都可以有多個利息,所以如果我使用「更新」,它只是更新前一行,但不會增加更多利息或刪除利息 – user1597498

+0

賬戶不是auto_increment,但它是唯一的。利息表中的interest_id是主鍵和auto_increment – user1597498

回答

0

如果您有查詢失敗,您應該捕獲錯誤並查看出了什麼問題。在PHP的所有MySQL API中,失敗的查詢會返回一個狀態碼來指示這一點。檢查此狀態代碼的示例很容易在文檔中找到。但大多數開發人員無法檢查狀態。


使用事務來確保兩個更改一起成功或者都不應用。在MySQL事務的

How to Decide to use Database Transactions

定義:http://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_transaction

語法在MySQL啓動和提交交易:http://dev.mysql.com/doc/refman/5.5/en/commit.html

你需要使用InnoDB。 MyISAM不支持事務。 http://dev.mysql.com/doc/refman/5.5/en/innodb-storage-engine.html

在PHP中,您需要停止使用舊的ext/mysql API並開始使用MySQLi或PDO。

http://php.net/manual/en/mysqli.quickstart.transactions.php

http://php.net/manual/en/pdo.begintransaction.php

+0

感謝法案共享多少有用的鏈接 – Nishant

+0

7鏈接...我從來沒有得到那麼多相關的鏈接 –

0

如果要更新表中的記錄,那麼你可以執行更新操作。它像如下

UPDATE Interests 
SET 
interest_name = '$name' 
WHERE 
accountno = '$id' ; 

試試吧。你可以通過這種方式解決你的問題。

2

如果你想更新你的表格記錄,你會做update操作。 這樣的:

UPDATE TABLE_NAME SET FIELD_NAME = 'VARIABLE_NAME' 
    WHERE PRIMERY_FIELD_NAME = 'VARIABLE_NAME' ; 
1

你沒有使用這兩個查詢,如果要更新數據簡單地使用mysql.use本的updat查詢:

<?php 
$query = "UPDATE Interests SET interest_name = '".$name."' WHERE account_id = '".$id."'" ; 
mysql_query($query); 
?> 
0

這是因爲查詢被視爲兩個單一事務,所以執行順序不能得到保證。 您所描述的效果是因爲插入是在刪除之前處理​​的,所以interests_id會自動遞增正確,然後通過刪除語句刪除該行。 您應該更改查詢邏輯或在一個事務中執行兩個查詢。