WelcomeYou :
感谢光临 DH`s BLOG 。欢迎常来踩!
PHP对MYSQL数据库进行事务处理及表锁定
作者:DH 日期:2009-09-16 09:31
PHP对MYSQL数据库进行事务处理及表锁定
MYSQL事务处理
MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。
注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
***:一般MYSQL数据库默认的引擎是MyISAM,这种引擎不支持事务!如果要让MYSQL支持事务,可以自己手动修改:
方法如下:1.修改c:\appserv\mysql\my.ini文件,找到skip-InnoDB,在前面加上#,后保存文件。
2.在运行中输入:services.msc,重启mysql服务。
3.到phpmyadmin中,mysql->show engines;(或执行mysql->show variables like 'have_%'; ),查看InnoDB为YES,即表示数据库支持InnoDB了。
也就说明支持事务transaction了。
4.在创建表时,就可以为Storage Engine选择InnoDB引擎了。如果是以前创建的表,可以使用mysql->alter table table_name type=InnoDB;
或 mysql->alter table table_name engine=InnoDB;来改变数据表的引擎以支持事务。
以下是我做測試的示例代碼:
/*************** transaction--1 ***************/
/*方法一*/
mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
//若不使用事務,則$sql執行成功,$sql1執行失敗
$sql = " insert into test values('11','88') ";
$sql1 = " insert into test values('11','88','444') ";
$res = mysql_query($sql);
$res1 = mysql_query($sql1);
//因爲使用了事務,則兩個insert都執行失敗
if($res && $res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");
/**************** transaction--2 *******************/
/*方法二*/
mysql_query("SET AUTOCOMMIT=0"); //設置mysql不自動提交,需自行用commit語句提交
$sql = " insert into test values('11','88') ";
$sql1 = " insert into test values('11','88','444') ";
$res = mysql_query($sql);
$res1 = mysql_query($sql1);
//因爲使用了事務,則兩個insert都執行失敗
if($res && $res1){
mysql_query("COMMIT");
}
else{
mysql_query("ROLLBACK");
}
mysql_query("END");
/*************************** END ***************/
对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:
代码如下:
//MyISAM & InnoDB 都支持,
//Notes:query語句不能寫在一起如:mysql_query("select * from a;select * from b;");
$sql_1=" LOCK TABLES test WRITE ";
mysql_query($sql_1);
$sql_2=" INSERT INTO test VALUES('".$a."','".$b."') ";
if(mysql_query($sql_2)){
echo 'successful!';
}else{
echo 'Unsuccessful!';
}
$sql_3=" UNLOCK TABLES ";
mysql_query($sql_3);
/*************************** END ***************/
对话zhang
作者:DH 日期:2009-09-02 10:18
昨天和朋友聊天的内容,如下:
self:最近对网络有什么高深的看法没?
zhang:更加坚信,内容才是王道,技术创新意义不大,太容易被复制
self:呵呵,原创王道 ,不过抄的也快
zhang:恩,我用一个月时间把我网站从210万排名拉到50万以下,决定放弃弄论坛了,太累
zhang:我没原创,都是抄了改标题 ,百分百抄袭
self:跟抄速度一流的话其实也跟原创就差不多了
zhang:靠,这句话绝对经典
后来想了想,也是,现在网络上的抄袭速度越来越厉害,可谓是神速了
不过既然是搞这个的,有句话也是很受用的,原创的不一定比整合的好
思路混乱,胡写2句,凑合看吧
永别,多多
作者:DH 日期:2009-08-15 23:20
Comet may have hit Jupiter
作者:DH 日期:2009-07-22 08:42
NASA images show scar in planet’s atmosphere near south pole
多多抗战20天,继续,没问题的,多坚强
作者:DH 日期:2009-07-07 16:22
歌王迈克尔·杰克逊心脏停搏26日逝世 终年50岁
作者:DH 日期:2009-06-26 09:51
跟老婆一说,她的第一反应就认为是炒作。
主要这消息有点太突然了,看看今天晚点的消息吧。
Singer Michael Jackson dead at 50
Legendary pop star had been preparing for London comeback tour
Michael Jackson, the sensationally gifted child star who rose to become the “King of Pop” and the biggest celebrity in the world only to fall from his throne in a freakish series of scandals, died Thursday. He was 50.
Jackson died at UCLA Medical Center in Los Angeles. Ed Winter, the assistant chief coroner for Los Angeles County, confirmed his office had been notified of the death and would handle the investigation.
全球媒体关注杰克逊死讯 NBC与BBC进行特别报道
美国全国广播公司(NBC)本来计划晚上10点播出因癌症去世的女星法拉·佛赛特的专题报道。现在他们决定延长节目时间,将佛赛特与杰克逊的新闻一起报道。哥伦比亚广播公司(CBS)也会在十点对两位明星的死亡同时进行报道。英国广播公司也进行了特别报道。
网民争相浏览杰克逊病逝消息 美国多家网站瘫痪
关于迈克尔·杰克逊死讯对互联网的影响,记者玛格丽特·西尔格勒(MG Siegler)在Techcrunch博客上写到,很少有哪位名人的名气能与迈克尔·杰克逊相比,在这个星球上,无论你是喜欢他还是讨厌他,都知道他的名字。
这正是今天导致很多网站因报道杰克逊过世的消息而出现了大麻烦的原因。不难想象,当很多人在Twitter上同时大量发布有关杰克逊的tweets时,是
PHP截取字符串 包函HTML标志的也可截取
作者:DH 日期:2009-06-25 13:48
最近需要在HTML的内容中提取一段文本作为简介,如果用普通的办法提取那么将有可能出现截取了半个HTML标志的情况,会破坏页面布局, 为此添加了这么一个函数,可完美解决此问题!!注意在这里你截取的字符数是不含HTML标志的!!
<?php
/**
* 截取HTML字符串 允许忽略HTML标志不计
*
* Author:学无止境
* Email:
* QQ: 339534039
* Blog:http://hi.baidu.com/phps
*
* 转载请保留作者信息
*
* @param 要截取的HTML $str
* @param 截取的数量 $num
* @param 是否需要加上更多 $more
* @return 截取串
*/
function phpos_chsubstr_ahtml($str,$num,$more=false)
{
$leng=strlen($str);
if($num>=$leng) return $str;
$word=0;
$i=0; /** 字符串指针 **/
$stag=array(array()); /** 存放开始HTML的标志 **/
$etag=array(array()); /** 存放结束HTML的标志 **/
$sp = 0;
&nb









































