[英]Execute multiple queries at once in Mysql using PHP
我想将大注册表格的信息插入Mysql数据库。 我使用多个表并使用多个mysql_query命令。
问题是:如果其中一个查询发生错误,该过程将停止,但先前的查询将更改表!
我想将所有表都改成一张或什么都不要! 我怎样才能做到这一点?
您正在寻找的是TRANSACTIONS
因为您不使用MyISAM
因为它不支持Transactions
。
transactions
的概念是要么所有查询都将执行,要么根本不执行查询。
用简单的话来说, all-or-nothing
是Transactions
要做的
这是使用mysqli
的基本示例
mysqli_query("START TRANSACTION");
$query1 = mysqli_query("INSERT INTO TABLE1(id) VALUES(2)");
$query2 = mysqli_query("INSERT INTO TABLE2(id) VALUES(3)");
if ($query1 and $query2) {
mysqli_query("COMMIT"); //Commits the current transaction
} else {
mysqli_query("ROLLBACK");//Even if any one of the query fails, the changes will be undone
}
注意:这只是一个简单的示例,如果您使用try
和catch
块处理然后正确地执行异常会更好。
看看PHP DOCS
首先,首先-停止使用mysql_*
函数,因为它们在最新版本的PHP中已弃用,并将在下一个主要版本(v7)中删除
我建议您了解PDO ,尤其是针对您眼前的问题, PDO :: beginTransaction , PDO :: commit和PDO :: rollback
正如卡西米尔(Casimir)和希波吕特(Hippolyte)所说:使用交易。 正如史蒂芬所说:不要使用不推荐使用的API。 这里使用mysqli API(作为PDO的替代方法):
$link = @mysqli_connect($host, $username, $password, $db_name);
@mysqli_begin_transaction($link);
$stmt = @mysqli_prepare($link, "UPDATE table1 SET col1=?, col2=?");
@mysqli_stmt_bind_param($stmt, 'ss', $someString, $someOtherString);
if (@mysqli_stmt_execute($stmt)) {
$stmt2 = @mysqli_prepare($link, "UPDATE table2 SET col3=?, col4=?");
@mysqli_stmt_bind_param($stmt2, 'id', $someInteger, $someDouble);
if (@mysqli_stmt_execute($stmt2)) {
@mysqli_commit($link);
} else {
@mysqli_rollback($link);
}
} else {
@mysqli_rollback($link);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.