本文目錄一覽:
- 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();
}
原創文章,作者:SJLW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135033.html