mysql用事务必须要关掉自动提交么?还是说pdo使用事物才需要关闭

mysql用事务必须要关掉自动提交么?还是说pdo使用事物才需要关闭,第1张

MySQL默认的存储引擎是MyISAM,MyISAM存储引擎不支持事务处理,所以改变autocommit没有什么作用。但不会报错,所以要使用事务处理的童鞋一定要确定你所 *** 作的表示支持事务处理的,如InnoDB。如果不知道表的存储引擎可以通过查看建表语句查看建表的时候有没有指定事务类型的存储引擎,如果没有指定存储引擎默认则是MyISAM不支持事务的存储引擎。

function func($val,$id) {

$sql="update table set a=? where id=?"

$pre=$this->pdo->prepare($sql)

$this->pdo->beginTransaction()//开启事务

$bo=$pre->execute(array($val,$id))

if($bo){

//…执行代码……

$this->pdo->commit()//提交事务

return true

}else{

//…执行代码……

$this->pdo->rollBack()//回滚事务

return false

}

}

就是 *** 作数据库的方法,

pdo就是把 *** 作数据库的函数封装成一个pdo类,其间做了安全验证而已。

在使用PDO之前首先要设置PHP.INI文件,使PHP支持PDO,因为PHP5默认是不支持的。在PHP安装目录下找到PHP.INI文件,打开并搜索extension=php_pdo.dll 和 extension=php_pdo_mysql.dll,将前面的分号(;)去掉,重启apache即可。

接下来我们就开始写PHP代码了,首先是连接数据库,看下面的例子:

<!--?php

define('DB_NAME', 'pdo_test')

define('DB_USER', 'root')

define('DB_PASSWORD', '')

define('DB_HOST', 'localhost')

define('DB_CHARSET', 'utf8')

try {

$DBH = new PDO('mysql:host='.DB_HOST.'dbname='.DB_NAME, DB_USER, DB_PASSWORD)

$DBH--->exec('SET CHARACTER SET '.DB_CHARSET)

$DBH->exec('SET NAMES '.DB_CHARSET)

} catch (PDOException $e) {

print "Error!: " . $e->getMessage() . "<br>"

die()

}

?>

连接成功后,我们需要对数据库中的数据进行增删改查 *** 作,这里主要用到exec和query两个函数。

示例:

<!--?php

//增加数据

$sql_insert = 'Insert INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,'.time().rand(1,100).','.time().rand(1,100).',\'no\')'

$back = $DBH--->exec($sql_insert)//返回 bool 的true or fal

$lastInsertId = $DBH->lastInsertId()

//删除数据

$sql_delete = 'Delete FROM wp_options Where option_id='.$lastInsertId

$back = $DBH->exec($sql_delete)//返回 bool 的true or fal

$lastInsertId = $DBH->lastInsertId()

//更新数据

$sql_update = 'Update wp_options SET option_name = \''.time().rand(1,100).'\' Where option_id='.$lastInsertId

$lastUpdateId = $DBH->lastInsertId()//返回的对应的 *** 作的id

//查询数据

$sql_select = 'Select option_id FROM wp_options orDER BY option_id DESC LIMIT 4 '

$back = $DBH->query($sql_select)//返回一个对象 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back = $DBH->query($sql_select)->fetch()//返回一条数据结果 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back = $DBH->query($sql_select)->fetchAll()//返回一个数组 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集

$back = $DBH->query($sql_select)->fetchColumn(0)//返回一个字段字符串,这个字符串是返回的记录的第一条记录的第一个字段

?>

到这里,PDO的基本 *** 作基本上结束了。对于一般的企业网站,小型的管理系统基本上能满足了,但是,如果我们开发大型网站或者逻辑较复杂的管理系统,仅仅靠数据的读写是远远不够的,我们可能还需要对数据库的存储过程、事务等对象进行 *** 作,下面我们继续看看用PDO是如何实现的。如果还有更多问题可以去后盾网论坛问题求助专区,希望我的回答对你有帮助!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6120641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存