日期:2014-05-17  浏览次数:20508 次

PHP事务的如何写?
PHP 的事务怎么写? 我现在是一条update,一条insert
代码如下,错误是,值类型发生了错误,事务没起作用.

$db = new DbManager();
$conn = $db->getConnection();
$conn->set_charset("utf8");

if(mysqli_connect_errno())
{
echo 'error connect database! please content manager!';
exit;
}
//echo connection_status();
$tbNums = explode(',',$tbNum);

$conn->autocommit(FALSE);
$flag = true;
$a=0;
foreach($tbNums as $key => $value)
{
$updateBalance = "UPDATE T_SMS_TBNUM SET STATUS = 2 WHERE ID = ?";
$insertRelate = "INSERT INTO T_SMS_TBNUMRELATE (TBID,OWNCLIENTID,REALFEE,CREATETIME) VALUES(?,?,?,?)";


$stmtUpdateClient = $conn->prepare($updateBalance);
$stmtUpdateClient->bind_param('i',$value);
$ss = $stmtUpdateClient->execute();

$stmt = $conn->prepare($insertRelate);
$foura = 4;
$a++;
if($a!=0){
$value = 's';
}
$stmt->bind_param('iids',$value,$clientId,$foura,date('Y-m-d H:i:s'));
$boooo = $stmt->execute();
echo $ss.'+'.$boooo;
if($stmtUpdateClient->affected_rows <= 0 || $stmt->affected_rows <= 0)
{
echo $stmtUpdateClient->affected_rows.'|'.$stmt->affected_rows;
$flag = false;
break;
}
}
if(!$flag)
{
$conn ->rollback();
$conn -> autocommit(TRUE);
$conn->close();
return 'paylog false!';
}else
{
$conn->commit();
$conn -> autocommit(TRUE);
$conn->close();
return '1';
}

------解决方案--------------------
if( $stmt->affected_rows <= 0 
------解决方案--------------------
  ($masterId && $stmtLower->affected_rows <= 0))
{
$conn ->rollback();
$conn -> autocommit(TRUE);
$conn->close();
return 'unknow_error';
}else
{
$conn->commit();
$conn -> autocommit(TRUE);
$conn->close();
return '1';
}