0

我有两张桌子。一个是账户,另一个是利息。一个帐户可以有多个兴趣并且可以编辑。现在,该过程正在删除该帐户的所有兴趣,然后插入这些兴趣。查询是:

"从兴趣中删除 account_id='$id'"

"插入兴趣 (account_id, interest_name) VALUES('$id', '$name')"

当用户更新他们的帐户时,我使用这两个查询,但插入失败,表中没有插入任何内容(ps。interests_id 是 auto_increment 并且已被计算在内)但表中没有任何新内容。当我注释掉删除查询时。插入将成功。

有谁知道我能做什么?

4

5 回答 5

2

如果你想更新你的表记录,你会做update操作。像这样:

UPDATE TABLE_NAME SET FIELD_NAME = 'VARIABLE_NAME' 
  WHERE PRIMERY_FIELD_NAME = 'VARIABLE_NAME' ;
于 2012-12-03T06:13:02.873 回答
1

你不必使用这两个查询,如果你想更新数据只需使用 mysql 的更新查询。使用这个:

<?php
$query = "UPDATE Interests SET interest_name = '".$name."' WHERE account_id = '".$id."'" ;
mysql_query($query);
?>
于 2012-12-03T06:23:34.407 回答
0

如果您的查询失败,您应该捕获错误并查看出现了什么问题。在所有用于 PHP 的 MySQL API 中,失败的查询会返回一个状态码来表明这一点。检查此状态代码的示例很容易在文档中找到。但大多数开发人员未能检查状态。


使用事务来确保两个更改一起成功或都不应用。

如何决定使用数据库事务

MySQL 中事务的定义: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

于 2012-12-03T05:59:17.580 回答
0

如果要更新表记录,则可以执行更新操作。它喜欢跟随

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

试试看。您可以通过这种方式解决您的问题。

于 2012-12-03T06:09:01.327 回答
0

发生这种情况是因为查询被视为两个单一事务,因此无法保证执行顺序。您描述的效果是因为插入是在删除之前处理​​的,因此 interests_id 正确地自动递增,然后通过删除语句删除该行。您应该更改查询逻辑或在一个事务中执行两个查询。

于 2015-06-15T10:59:20.860 回答