function credits($new_path)
{
$objDB = dblink();
$sql = 'UPDATE u_credit SET num=num+1 WHERE userid IN('.$new_path.')';
$ret=$objDB->execute($sql); // 又一查询
$objDB->execute("SELECT num FROM u_credit ");
$rs_userid = $objDB->fetch_array();
echo $rs_userid['num'];
}
上面是我要调用的函数,函数中有二个sql语句,有时数据很多时,
不同步,为了让数据同步,我想让二个sql做成一个事务,大家帮我想想,
怎么加事务的代码呀,帮忙贴点代码。。thanks
{
$objDB = dblink();
$sql = 'UPDATE u_credit SET num=num+1 WHERE userid IN('.$new_path.')';
$ret=$objDB->execute($sql); // 又一查询
$objDB->execute("SELECT num FROM u_credit ");
$rs_userid = $objDB->fetch_array();
echo $rs_userid['num'];
}
上面是我要调用的函数,函数中有二个sql语句,有时数据很多时,
不同步,为了让数据同步,我想让二个sql做成一个事务,大家帮我想想,
怎么加事务的代码呀,帮忙贴点代码。。thanks
解决方案 »
- 用MYSQL做运算和用PHP做运算,哪个优
- 请教下preg_match的问题
- html文件上的图片链接到DISCUZ的论坛首页 但是怎么点击是下载这个index.php啊
- 问个关于网站接口的菜鸟级问题。。。
- php判断字符串内是否含有特殊字符,但是字符串含有中文就没效果了,请教?
- [求助]PHP has encountered an Access Violation at 0C185D5D
- 表格行交替换色问题
- 送大家一个防止截错字符的substr函数,并询问一个问题
- 匹配中的变量引用:eregi_replace("(<a href='任意字符'>)", "<a href='".rawurlencode("任意字符")."'>")
- Windows98下如何安装php?
- 有关php与mysql上传图片的问题
- pagination 执行自定义sql文
lz只能通过update条件判断是否是需要更新的数据。
想支持事务处理,需要用InnoDB引擎,
结合select update语句进行update处理就可以了。
{
$objDB = dblink();
$objDB->execute("SET AUTOCOMMIT=0");
$objDB->execute("Begin"); $sql = 'UPDATE u_credit SET num=num+1 WHERE userid IN('.$new_path.')';
$ret=$objDB->execute($sql);
if(!isset($ret))
{
//fail, neeed to delete the record added just now.
$objDB->execute("Rollback");
echo "serious error";
die;
}
// 又一查询
$objDB->execute("SELECT num FROM u_credit ");
$rs_userid = $objDB->fetch_array();
echo $rs_userid['num'];
$objDB->execute("commit");
}
我加了上面颜色代码,可感觉好像没有用,因我随便注释 其中后来加的代码,结果都是一样运行。
结合select update语句进行update处理就可以了。
例如這樣的表結構:
CREATE TABLE `countries` (
`id` int(6) NOT NULL auto_increment,
`value` varchar(250) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
是不是写
$objDB->execute("SET AUTOCOMMIT=0");
$objDB->execute("Begin");
等语句时还需配制什么呀,或是这样写本就没用呀,
你可以在数据库上测试一下,
执行SET AUTOCOMMIT = 0
再update 、 rollback、update、commit测试一下事务处理是否好用。PHP方面,如果是mysqli、pear或者ZendFramework_DB的话,执行autocommit相应的接口就可以。
/*
1 dblink(); 使用mysqli 建立连接 例:function dblink(){ return mysqli("localhost","root","password","database") }
2 创建的表使用 innoDB,或BDB 引擎
*/
$objDB = dblink();
$objDB->autocommit(false); //关闭自动提交,使用事务提交 $sql="update table set f1='xx'";
$r1=$objDB->query($sql); $sql="update table set f2='yy'";
$r2=$objDB->query($sql); if($r1 && $r2){
$objDB->commit(); //提交事务
}else{
$objDB->rollback(); //回滚事务
}
$objDB->autocommit(true); //开启自动提交
$objDB->close(); //关闭数据库
?> email:[email protected] 希望各朋友交流技术!
function credits($new_path)
{
$objDB = dblink();
$sql_set_innodb="alter table u_credit type=innodb";
$sql_set_myisam="alter table u_credit type=myisam";
$sql = 'UPDATE u_credit SET num=num+1 WHERE userid IN('.$new_path.')';
$objDB->execute($sql_set_innodb);
$objDB->execute("start transaction");
$ret=$objDB->execute($sql); // 又一查询
$result=$objDB->execute("SELECT num FROM u_credit ");
if($ret && $result)
$objDB->execute("commit");
else
$objDB->execute("rollback");
$objDB->execute($sql_set_myisam);
$rs_userid = $objDB->fetch_array();
echo $rs_userid['num'];
}