1. php中PDO的事務處理如何分析
事務處理具有四個特性:原子性、一致性、獨立性、持久性。
並不是所有的資料庫都支持事務處理的,PDO 為能夠執行事務處理的資料庫提供事務支持。
配置事務處理需注意:
1、關閉 PDO 的自動提交;
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false);
2、開啟一個事務需要的方法;
$pdo->beginTransaction(); // 開啟一個事務
$pdo->commit(); // 提交事務
$pdo->rollback(); // 回滾事務
3、一般事務處理是運行在 try...catch...語句中,當事務失敗時執行 catch 代碼段。
php
try {
$pdo->beginTransaction(); // 開啟一個事務
$row = null;
$row = $pdo->exec("xxx"); // 執行第一個 SQL
if (!$row)
throw new PDOException('提示信息或執行動作'); // 如出現異常提示信息或執行動作
$row = $pdo->exec("xxx"); // 執行第二個 SQL
if (!$row)
throw new PDOException('提示信息或執行動作');
$pdo->commit();
} catch (PDOException $e) {
$pdo->rollback(); // 執行失敗,事務回滾
exit($e->getMessage());
}
?>
在事務中的 SQL 語句,如果出現錯誤,那麼所有的 SQL 都不執行。當所有 SQL 有無誤的時候,才提交執行。
2. 談談你對 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);
?>
引自:http://www.cnblogs.com/in-loading/archive/2012/02/21/2361702.html
3. PHP高並發下單用事務可以解決嗎
事物不是解決高並發的。事物是為了一個操作的完整性才使用的。
php的高並發在我看主要以來php腳本的執行速度,以及對資料庫的數據訪問的次數,還有緩存系統的使用(包括數據緩存以及模板緩存),系統架構的優化。
還有就是web伺服器做負載均衡,域名cdn做負載均衡等。
4. php是什麼意思
php的意思是:php,又稱超文本預處理器,是一種通用開源腳本語言。其是在伺服器端執行的腳粗銷本語言,與C語言類似,是常用的網站編程語言。
PHP特點:
(一)開源性和免費性
由於PHP的解釋器的源代碼是公開的,所以安全系數較高的網站可以自己更改PHP的解釋程岩蔽游序。另外,PHP運行環境的使用也是免費的。
(二)快捷性
PHP是一種非常容易學習和使用的一門語言,它的語法特點類似於C語言,但又沒有C語言復雜的地址操作,而且又加入了面向對象的概念,再加上它具有簡潔的語法規則,使得它操作編輯非常簡單,實用性很強。
(三)資料庫連接的廣泛性
PHP可以與很多主流的資料庫建立起連接,如MySQL、ODBC、Oracle等,PHP是利用編譯的不同函數與這些資料庫建立起連接的,PHPLIB就是常用的為一般事務提供的基庫。
(四)面向過程和面向對象並用
在PHP語言的使用中,可以分別使用面向過程和面向對象,而且可以將PHP面向過程和面向對象兩者一起混用,這是其它很多編程語言做不到的。