PDO顯然將成為php的標准數據庫操作方式。雖然國內的很多php空間或主機都已支持php5.2以上的版本了,但由於普及和技術上的原因還是有部分不支持pdo的。
由於從今年開始 哈爾濱智華軟件的php課程在數據庫操作的學習改為以pdo為主(當然課程在學習和最後實訓時還是有mySQL函數操作數據庫訓練的),在實際開發中,我的學生不可避免的遇到了 采用pdo開發的程序,在程序實施時卻發現服務器不支持pdo,好在都是客戶的服務器,重新升級安裝了一下php的新版本就解決了。
但這樣卻提出了一個問題?
要麼開發用mySQL函數方式,
要麼開發用pdo而後升級php版本,
要麼發現用pdo開發無法升級php版本,用mySQL函數方式重寫原有pdo方式代碼
看來開發用開發用mySQL函數方式 似乎又成了最好的解決辦法,這不又回到起始點,難道非要等到pdo都普及了再用pdo開發麼,如果這樣 就意味著我的php課程將教授學生一個已經開始淘汰的開發方式,學生學習完以後,幾年內又要不得不放棄已經習慣的mySQL函數開發方式,再適應新的pdo開發方式。
有沒有一個折中方案,既可以讓學生學到新的pdo開發方式,在工作中又可以應對老得mySQL函數開發方式呢?那天學生問起 忽發奇想寫個類,類的方法都是pdo的方式,然後將mySQL函數的操作 都封裝到 這個類的方法裡不就可以了麼。
解決初衷 是開發是都采用pdo方式操作,如果需要mySQL函數方式 只要將連庫的文件替換成mySQL函數連庫代碼,然後在後邊加上這個類 並實例化對象為pdo的那個操作對象不就可以實現pdo方式改為mySQL函數方式了
pdo的增刪改都一樣的,代碼如下:
<?php
require "./connDB.php" ;
require ’./Deep.Class.MySQLfunction4PDO.php’;
$db = new Deep_MySQLfunction4PDO();
$sql="insert into guestbook(guestName,guestDatetime)values(’lvhaipeng zhihuasoft".mt_rand(1,100)." ’,’".date(’Y-m-d H:i:s’)."’)";
//2 exec方法
$count = $db->exec($sql);
echo $count;
?>
查詢代碼如下:
<?php
require ’./connDB.php’;
require ’./Deep.Class.MySQLfunction4PDO.php’;
$db = new Deep_MySQLfunction4PDO();
//2 query查詢
$stmt = $db->query("SELECT * FROM guestbook" );
// 1條記錄
// $row =$stmt->fetch();
//echo $row[’guestName’],"<br />";
while($row = $stmt->fetch())
{
echo $row[’guestName’],"<br />";
}
?>
大家會發現我在連庫文件後 ,添加了2行代碼(當然工作時將這兩行寫在連庫文件裡剛好了)
require ’./Deep.Class.MySQLfunction4PDO.php’;
$db = new Deep_MySQLfunction4PDO();
這樣通過Deep_MySQLfunction4PDO類我就實現了不用更改現有的pdo代碼,實現MySQL函數方式的操作了
Deep_MySQLfunction4PDO類文件代碼如下:
<?php
/*
模仿pdo方式的一個mysql函數的操作類。
哈爾濱智華軟件培訓學校 呂海鵬2011-11-25
調用:在mysql連庫函數後調用
require ’./Deep.Class.MySQLfunction4PDO.php’;
$db = new Deep_MySQLfunction4PDO();
*/
// 仿PDO class
class Deep_MySQLfunction4PDO{
//插入 刪除 修改
public function exec($sql){
@mysql_query( $sql ) or die("SQL語句執行錯誤!");
return mysql_affected_rows();
}
//查詢
public function query($sql){
$stmt=new Deep_MySQLfunction4PDO_stmt();
$stmt->query=@mysql_query( $sql ) or die("SQL語句執行錯誤!");
return $stmt;
}
}
// 仿PDOStatement class
class Deep_MySQLfunction4PDO_stmt{
var $query;
public function fetch(){
return mysql_fetch_array($this->query);
}
}
?>
前一段時間課程比較多 今日周末有空 整理記錄如上, 又有學生提出 仿pdo的類遇到查詢 不用這個while($row =$stmt->fetch())用foreach( $stmt as $row)不行 我這改了改這個類實現了,這是那個代碼寫法有些古怪 待我有空再 整理 做這篇文章的後續說明吧
作者 呂海鵬