繁体   English   中英

使用PHP在Mysql中一次执行多个查询

[英]Execute multiple queries at once in Mysql using PHP

我想将大注册表格的信息插入Mysql数据库。 我使用多个表并使用多个mysql_query命令。

问题是:如果其中一个查询发生错误,该过程将停止,但先前的查询将更改表!

我想将所有表都改成一张或什么都不要! 我怎样才能做到这一点?

您正在寻找的是TRANSACTIONS因为您使用MyISAM因为它不支持Transactions

transactions的概念是要么所有查询都将执行,要么根本不执行查询。

用简单的话来说, all-or-nothingTransactions要做的

这是使用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
}

注意:这只是一个简单的示例,如果您使用trycatch块处理然后正确地执行异常会更好。

看看PHP DOCS

首先,首先-停止使用mysql_*函数,因为它们在最新版本的PHP中已弃用,并将在下一个主要版本(v7)中删除

我建议您了解PDO ,尤其是针对您眼前的问题, PDO :: beginTransactionPDO :: commitPDO :: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM