PHP操作MySQL事務執行個體,mysql事務執行個體
本文執行個體講述了PHP操作MySQL事務的方法,分享給大家供大家參考。具體方法如下:
一般來說,事務都應該具備ACID特徵。所謂ACID是Atomic(原子性),Consistent(一致性),Isolated(隔離性),Durable(持久性)四個詞的首字母所寫,下面以“銀行轉帳”為例來分別說明一下它們的含義:
① 原子性:組成交易處理的語句形成了一個邏輯單元,不能只執行其中的一部分。換句話說,事務是不可分割的最小單元。比如:銀行轉帳過程中,必須同時從一個帳戶減去轉帳金額,並加到另一個帳戶中,只改變一個帳戶是不合理的。
② 一致性:在交易處理執行前後,資料庫是一致的。也就是說,事務應該正確的轉換系統狀態。比如:銀行轉帳過程中,要麼轉帳金額從一個帳戶轉入另一個帳戶,要麼兩個帳戶都不變,沒有其他的情況。
③ 隔離性:一個交易處理對另一個交易處理沒有影響。就是說任何事務都不可能看到一個處在不完整狀態下的事務。比如說,銀行轉帳過程中,在轉帳事務沒有提交之前,另一個轉帳事務只能處於等待狀態。
④ 持久性:交易處理的效果能夠被永久儲存下來。反過來說,事務應當能夠承受所有的失敗,包括伺服器、進程、通訊以及媒體失敗等等。比如:銀行轉帳過程中,轉帳後帳戶的狀態要能被儲存下來。
在PHP中,mysqli 已經很好的封裝了mysql事務的相關操作。如下樣本:
複製代碼 代碼如下:$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";
$sql2 = "update ScoreDetail set FScore = 300 where ID= '123456'";
$sql3 = "insert into ScoreDetail ID,Score) values ('123456',60)";
$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//開始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
if(!$mysqli->errno){
$mysqli->commit();
echo 'ok';
}else{
echo 'err';
$mysqli->rollback();
}
在這裡,我們再使用 php mysql 系列函數執行事務。
複製代碼 代碼如下:$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";
$sql2 = "update ScoreDetail set FScore = 300 where ID= '123456'";
$sql3 = "insert into ScoreDetail ID,Score) values ('123456',60)";
$conn = mysql_connect('localhost','root','');
mysql_select_db('DB_Lib2Test');
mysql_query('start transaction');
//mysql_query('SET autocommit=0');
mysql_query($sql1);
mysql_query($sql2);
if(mysql_errno ()){
mysql_query('rollback');
echo 'err';
}else{
mysql_query('commit');
echo 'ok';
}
// mysql_query('SET autocommit=1');
// mysql_query($sql3);
在這裡要注意:
MyISAM:不支援事務,用於唯讀程式提高效能
InnoDB:支援ACID事務、行級鎖、並發
Berkeley DB:支援事務
希望本文所述對大家的PHP+MySQL資料庫程式設計有所協助。
誰給個php操作mysql類並有詳細使用說明或例子
下面這個,是針對php5的一個簡單資料庫封裝類,適合學習,其他的如刪除、更新等操作,你可以自己加上:
class Mysql{ //首先定義一個類,首寫字母大寫
public $host;//伺服器名,存取修飾詞PUBLIC證明$host是一個公用的屬情在類的內部外部都可訪問,可以被繼承
public $user;//使用者名稱,是公用的屬性
private $pass;//密碼,問修飾符private證明$pass是私人的.只能在類的內部使用且不能被繼承.
public $dbname;//資料庫名,也是公用的屬性.
//__construct聲名這是一個造函數,定義一些初始的資訊.有三個參數
public function __construct($host,$user,$pass,$dbname){
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->dbname = $dbname;
$link = @mysql_connect($this->host,$this->user,$this->pass)
or die("error");
@mysql_select_db($this->dbname,$link)
or die("error2");
}
//定義資料庫的查尋和顯示函數
function myQuery($sql){
$result = mysql_query($sql);
if(!$result){
echo "error3";
exit;
}
$num = mysql_num_rows($result);
if($num){
echo "NO".$num;
}
while($row = mysql_fetch_assoc($result)){
echo '
'.htmlspecialchars(stripslashes($row['body']))."</td></tr>";
}
}
}
$rutt = new Mysql('localhost','root','ssss','calvin');//執行個體化一個類...記住這裡的參數是和建構函式的參數一樣的...
$rutt->myQuery(......餘下全文>>
想做個 網站 ,一段PHP編程代碼,PHP的MYSQL緩衝怎實現? 最好舉個例子
//以下是緩衝類:
class cache {
//緩衝目錄
var $cacheRoot = "./cache/";
//緩衝更新時間秒數,0為不緩衝
var $cacheLimitTime = 0;
//快取檔案名
var $cacheFileName = "";
//緩衝副檔名
var $cacheFileExt = "html";
/*
* 建構函式
* int $cacheLimitTime 緩衝更新時間
*/
function cache( $cacheLimitTime ) {
if( intval( $cacheLimitTime ) )
$this->cacheLimitTime = $cacheLimitTime;
$this->cacheFileName = $this->getCacheFileName();
//echo $this->cacheFileName;
ob_start();
}
/*
* 檢查快取檔案是否在設定更新時間之內
* 返回:如果在更新時間之內則返迴文件內容,反之則返回失敗
*/
function cacheCheck(){
if( file_exists( $this->cacheFileName ) ) {
$cTime = $this->getFileCreateTime( $this->cacheFileName );
if( $cTime + $this->cacheLimitTime > time() ) {
echo file_get_contents( $this->cacheFileName );
ob_end_flush();
exit;
}
}
return false;
}
/*
* 快取檔案或者輸出靜態
* string $staticFileName 靜態檔案名稱(含相對路徑)
*/
function caching( $staticFileName = "" ){
if( $this->cacheFileName ) {
$cacheContent = ob_get_contents();
//echo $cacheContent;
ob_end_flush();
if( $staticFileName ) {
$this->saveFile( $staticFileName, $cacheContent );
}
if( $this->cacheLimitTime )
$this->saveFile( $this->cacheFileName, $cacheContent );
}
}
/*
......餘下全文>>
http://www.bkjia.com/PHPjc/906673.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/906673.htmlTechArticlePHP操作MySQL事務執行個體,mysql事務執行個體 本文執行個體講述了PHP操作MySQL事務的方法,分享給大家供大家參考。具體方法如下: 一般來說,事務都應...