事务和提交
哪个代码适合交易? 我需要检查提交的查询结果吗?
此代码没有任何结果
mysql_query("BEGIN");
$strSQL = "INSERT INTO table values";
$strSQL .="('','a')";
$objQuery1 = mysql_query($strSQL);
$strSQL = "INSERT INTO table values";
$strSQL .="('','a','a')";
$objQuery2 = mysql_query($strSQL);
if(($objQuery1) and ($objQuery2))
{
mysql_query("COMMIT");
echo "Save Done.";
}
else
{
mysql_query("ROLLBACK");
}
?>
,或者
此代码结果 1 插入。为什么?不会提交识别错误?
<?php
mysql_query("BEGIN");
$strSQL = "INSERT INTO table values";
$strSQL .="('','a')";
$objQuery1 = mysql_query($strSQL);
$strSQL = "INSERT INTO table values";
$strSQL .="('','a','a')";
$objQuery2 = mysql_query($strSQL);
mysql_query("COMMIT");
?>
Which code is right for transaction?
do i need to check query result for commit?
this code result nothing
mysql_query("BEGIN");
$strSQL = "INSERT INTO table values";
$strSQL .="('','a')";
$objQuery1 = mysql_query($strSQL);
$strSQL = "INSERT INTO table values";
$strSQL .="('','a','a')";
$objQuery2 = mysql_query($strSQL);
if(($objQuery1) and ($objQuery2))
{
mysql_query("COMMIT");
echo "Save Done.";
}
else
{
mysql_query("ROLLBACK");
}
?>
or
this code rusult 1 insert. why?wont commit recognize the error?
<?php
mysql_query("BEGIN");
$strSQL = "INSERT INTO table values";
$strSQL .="('','a')";
$objQuery1 = mysql_query($strSQL);
$strSQL = "INSERT INTO table values";
$strSQL .="('','a','a')";
$objQuery2 = mysql_query($strSQL);
mysql_query("COMMIT");
?>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可能会感到困惑的是,在 MySQL 中发出
commit
并不会转化为rollback
[一切]错误。相反,它会翻译为:提交
没有错误的内容。相比之下,在 Postgres 中:
另外请考虑使用 mysqli。它直接支持这种东西:
http://www.php.net/manual /en/mysqli.commit.php
或 PDO:
http://php.net/manual/en/pdo.commit.php
使用 PDO,正确的顺序将如下所示:
使用 MySQLi,您也可以使其行为与上面类似使用
or
运算符:What might be confusing you is that issuing a
commit
in MySQL does not translate torollback
[everything] on error. It instead translates to:commit
stuff that had no errors.In Postgres, by contrast:
On a separate note, consider using mysqli instead. It supports this kind of stuff directly:
http://www.php.net/manual/en/mysqli.commit.php
Or PDO:
http://php.net/manual/en/pdo.commit.php
Using PDO, the correct sequence will look like this:
Using MySQLi, you can make it behave like the above too with the
or
operator:我认为调用mysql_query("COMMIT")需要根据之前查询是否成功来确定。因此,在上面的代码中,没有任何内容提交到数据库,因为前面的 2 个查询之一失败了。
I think the calling mysql_query("COMMIT") needs to be determined by the success of previous queries. Thus, in the above code nothing is commited to db because one of the 2 previous queries fail.