我正在使用php/mysql.我知道mysql中的事务但不能在我的脚本中使用.下面是我的脚本我怎么能在我的code.ie BEGIN,ROLLBACK,COMMIT中使用php事务
foreach($json_a['shop'] as $jsondata=>$json)
{
if($json['category']==='product')
{
$name_product=$json['name'];
$query1="insert into product(id,name,user_id)values('','" . mysql_real_escape_string($name_product). "','1')";
$result1=mysql_query($query1) or die("error in query".mysql_errno());
//echo "success...!";
$product++;
}
else
if($json['category']==='order')
{
$name_order=$json['name'];
$query2="insert into order(id,name,user_id)values('','" . mysql_real_escape_string($name_order). "','1')";
$result2=mysql_query($query2) or die("error in query".mysql_errno());
$order++;
}
else
if($json['category']==='sale')
{
$name_sale=$json['name'];
$query3="insert into sale(id,name,user_id)values('','" . mysql_real_escape_string($name_sale). "','1')";
$result3=mysql_query($query3) or die("error in query".mysql_errno());
$sale++;
}
}Run Code Online (Sandbox Code Playgroud)
Ali*_*aru 13
只需mysql_query('START TRANSACTION');在每个插页上发出并检查错误.如果其中一个没有成功,则立即发出ROLLBACK而不执行任何剩余的查询.如果一切顺利,所有人都会发出一个COMMIT.
将它们放在try-catch块中可能更容易,以避免使用if-else使用太多级别的嵌套.
// START TRANSACTION
try{
// INSERT 1
if(failed)
throw new Exception();
// INSERT 2
if(failed)
throw new Exception();
// INSERT 3
if(failed)
throw new Exception();
// COMMIT
}
catch(Exception $e){
// ROLLBACK
}
Run Code Online (Sandbox Code Playgroud)
您可能还想了解PHP的PDO扩展.交易是其功能的一部分.
一种选择是使用PDO.例:
$db = new PDO($dsn,$user,$password);
$db->beginTransaction();
$db->exec("delete from mytable");
$allGood = doSomethingElse();
if ($allGood)
{
$db->commit();
} else {
$db->rollBack();
}
Run Code Online (Sandbox Code Playgroud)
或者更优雅的方法:
$db = new PDO($dsn,$user,$password);
$db->beginTransaction();
try{
//first execution
$db->exec("delete from mytable");
//second execution
$db->exec("insert into anothertable");
//if all went well
$db->commit();
} catch (Exception $e) {
//something broke, hit undo
$db->rollBack();
}
Run Code Online (Sandbox Code Playgroud)