2012-12-03 85 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会自动递增正确,然后通过删除语句删除该行。 您应该更改查询逻辑或在一个事务中执行两个查询。