本文目录一览:
- 1、php 什么是pdo事物
- 2、谈谈你对 mysql 事务的认识 我是php初学者不懂这个 想请教大神教我
- 3、php中的事务有什么作用
- 4、php里面,什么叫对象内部?什么是对象外部?
- 5、PHP 如何在Redis中实现事物(事物提交和事物
php 什么是pdo事物
?php
//pdo 实现mysql 事务处理 简单示例
/*
实现向数据库中写入多条数据的事务
insert into test values ('test123', 'test123')
*/
$type = 'mysql'; //要连接的数据库类型
$host = 'localhost'; //数据库主机
$dbname = 'test'; //要选择的数据库名称
$password = '';
$username = 'root';
$dsn = "{$type}:dbname={$dbname};host={$host}";
try{
//连接数据库
$pdo = new PDO($dsn, $username, $password);
//编码
$pdo-exec("set names utf8");
//设置错误提示方式
$pdo-setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//开启标准事务
$pdo-beginTransaction();
//构造sql语句
//$sql = "insert into test values (?,?)";
$sql = "insert into test values (:user, :password)";
//或者使用此sql语句 :user :password 与问号功能相似 绑定参数
$stmt = $pdo-prepare($sql);
//为sql语句中的变量绑定变量
$stmt-bindParam(':user', $username);
$stmt-bindParam(':password', $password);
//为sql语句中的变量 赋值
$username = 'test123';
$password = '123456';
$stmt-execute();
$rows = $stmt-rowCount();
if($rows1){
//如果失败则抛出异常
throw new PDOexception('第一句sql语句执行失败!', '01');
}
$username = 'hello123';
$password = '123456';
$stmt-execute();
$rows = $stmt-rowCount();
if($rows1){
//如果失败则抛出异常
throw new PDOexception('第二句sql语句执行失败!', '02');
}
$username = 'world123';
$password = '123456';
$stmt-execute();
$rows = $stmt-rowCount();
if($rows1){
//如果失败则抛出异常
throw new PDOexception('第三句sql语句执行失败!', '02');
}
//如果没有异常被抛出则 sql语句全部执行成功 提交事务
$pdo-commit();
}catch(PDOexception $e){
//如果有异常被抛出 则事务失败 执行事务回滚
$pdo-rollback();
//输出异常信息
echo $e-getCode().'-----'.$e-getMessage();
$pdo = null;
}
?
谈谈你对 mysql 事务的认识 我是php初学者不懂这个 想请教大神教我
先简单介绍一下事务吧!事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!
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的数据表的锁定和解锁!
MYSQL5.0 WINXP下测试通过~ ^_^
mysql use test;
Database
changed
mysql CREATE TABLE `dbtest`(
- id int(4)
- ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05
sec)
mysql select * from dbtest
- ;
Empty set (0.01
sec)
mysql begin;
Query OK, 0 rows affected (0.00
sec)
mysql insert into dbtest value(5);
Query OK, 1 row affected
(0.00 sec)
mysql insert into dbtest value(6);
Query OK, 1 row
affected (0.00 sec)
mysql commit;
Query OK, 0 rows affected (0.00
sec)
mysql select * from dbtest;
+------+
| id
|
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00
sec)
mysql begin;
Query OK, 0 rows affected (0.00
sec)
mysql insert into dbtest values(7);
Query OK, 1 row affected
(0.00 sec)
mysql rollback;
Query OK, 0 rows affected (0.00
sec)
mysql select * from dbtest;
+------+
| id
|
+------+
| 5 |
| 6 |
+------+
2 rows in set (0.00
sec)
mysql
*******************************************************************************************************************
[PHP]
function
Tran( $sql ) {
$judge = 1;
mysql_query('begin');
foreach ($sql as $v) {
if
( !mysql_query($v) ) {
$judge =
0;
}
}
if ($judge == 0)
{
mysql_query('rollback');
return
false;
}
elseif ($judge == 1) {
mysql_query('commit');
return true;
}
}
[/PHP]
************************************************
?php
$handler=mysql_connect("localhost","root","");
mysql_select_db("task");
mysql_query("SET
AUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行
mysql_query("BEGIN");//开始事务定义
if(!mysql_query("insert
into trans (id)
values('2')"))
{
mysql_query("ROOLBACK");//判断当执行失败时回滚
}
if(!mysql_query("insert
into trans (id)
values('4')"))
{
mysql_query("ROOLBACK");//判断执行失败回滚
}
mysql_query("COMMIT");//执行事务
mysql_close($handler);
?
引自:
php中的事务有什么作用
严格说这不算是PHP的事务,应该是数据库的事务。
普通的SQL语句如果你UPDATE一个地方就没法恢复了,但用事务去处理的话还可以恢复,也就是事务的回滚。
php里面,什么叫对象内部?什么是对象外部?
知道对象概念就了解了
类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。
对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象
的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组
服务的封装体。客观世界是由对象和对象之间的联系组成的。
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类.类描述了一组有相同特性(属性)和相同行为(方法)的对象。
上面大概就是它们的定义吧, 也许你是刚接触面象对象的朋友, 不要被概念的东西搞晕了,
给你举个列子吧,如果你去中关村想买几台组装的PC机,到了那里你第一步要干什么,
是不是装机的工程师和你坐在一起,按你提供的信息和你一起完成一个装机的配置单呀,
这个配置单就可以想像成是类,它就是一张纸,但是它上面记录了你要买的PC机的信息,如果用这个配置单买10台机器,那么这10台机子,都是按这个配置单
组成的,所以说这10台机子是一个类型的,也可以说是一类的。那么什么是对象呢,类的实例化结果就是对象,
用这个配置单配置出来(实例化出来)的机子就是对象, 是我们可以操作的实体, 10台机子, 10个对象。
每台机子都是独立的,只能说明他们是同一类的,对其中一个机做任何动作都不会影响其它9台机器,但是我对类修改,
也就是在这个配置单上加一个或少一个配件, 那么装出来的9个机子都改变了, 这是类和对象的关系(类的实例化结果就是对象).
PHP 如何在Redis中实现事物(事物提交和事物
public function index()
{
$serv = new \swoole_server("0.0.0.0", 9501);
$serv-set([
'worker_num' = 1,//一般设置为服务器CPU数的1-4倍
'task_worker_num' = 8,//task进程的数量
'daemonize' = 1,//以守护进程执行
'max_request' = 10000,//最大请求数量
"task_ipc_mode " = 2 //使用消息队列通信,并设置为争抢模式
]);
$serv-on('Receive', [$this, 'onReceive']);//接收任务,并投递
$serv-on('Task', [$this, 'onTask']);//可以在这个方法里面处理任务
$serv-on('Finish', [$this, 'onFinish']);//任务完成时候调用
$serv-start();
}