0

我想向 DB 写入几个查询以保存 5 个用户。但在保存它们之前,我必须确定错误。例如,我插入了第一个用户,没有错误。但是在尝试保存第二个之后,出现了错误(注意:不仅重复错误)。之后,我必须取消我保存的所有数据,并从 DB 中删除第一个数据。这是个坏主意,最好以某种方式检查错误,然后保存所有 3 个用户......

问题:如何在插入数据之前检查错误。

注意:仅检查数据是否存在是不够的,因为可能会出现另一个错误。

4

4 回答 4

3

考虑将您的查询包装在一个事务中。

于 2012-05-31T12:11:15.140 回答
1

您正在寻找的是交易。这样,您将所有语句发送到服务器,然后在类似于沙箱的东西中执行,服务器检查错误,然后(如果没有错误!)它保存数据。

这可以通过将语句包装在 MySQL 中来完成:

BEGIN;
YOUR QUERIES GO HERE
COMMIT;

有关更多详细信息,您可以查看此文档。请注意,并非所有 MySQL 引擎都支持事务。

于 2012-05-31T12:11:19.647 回答
1

您是否尝试过使用事务一次将所有更改提交到数据库?然后,如果其中任何一个失败,所有将被回滚。

http://dev.mysql.com/doc/refman/5.5/en/commit.html

于 2012-05-31T12:14:15.803 回答
0

您需要在此处使用事务以更安全地插入数据库。

数据库表:users having 3 fields u_id int , u_name varchar, u_email varchar

<?php
$dbh = mysqli_connect("localhost", "db_user", "password", "databse_name");
mysqli_autocommit($dbh, FALSE);

// run query 1
$query1 = "INSERT INTO users (u_name,u_email) VALUES('Abdus Samad1', 'abdul.samad1@...')";
$result = mysqli_query($dbh, $query1);
if ($result !== TRUE) {
    mysqli_rollback($dbh);  // if error, roll back transaction
}

// run query 2
$query2 = "INSERT INTO users (u_name,u_email) VALUES('Abdus Samad2', abdul.samad2@...)";
$result = mysqli_query($dbh, $query2);
if ($result !== TRUE) {
  mysqli_rollback($dbh); // if error, roll back transaction
  echo "Error found in one of queries";
}
else{
  echo "Success";
}

// assuming no errors, commit transaction
mysqli_commit($dbh);

// close connection
mysqli_close($dbh);
?>
于 2012-05-31T13:31:50.893 回答