PHP操作MySQL事務執行個體,mysql事務執行個體_PHP教程

來源:互聯網
上載者:User

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事務的方法,分享給大家供大家參考。具體方法如下: 一般來說,事務都應...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.