PDO顯然將成為php的標(biāo)準(zhǔn)數(shù)據(jù)庫操作方式。雖然國內(nèi)的很多php空間或主機(jī)都已支持php5.2以上的版本了,但由于普及和技術(shù)上的原因還是有部分不支持pdo的。
由于從今年開始 哈爾濱智華軟件的php課程在數(shù)據(jù)庫操作的學(xué)習(xí)改為以pdo為主(當(dāng)然課程在學(xué)習(xí)和最后實訓(xùn)時還是有mySQL函數(shù)操作數(shù)據(jù)庫訓(xùn)練的),在實際開發(fā)中,我的學(xué)生不可避免的遇到了 采用pdo開發(fā)的程序,在程序?qū)嵤⿻r卻發(fā)現(xiàn)服務(wù)器不支持pdo,好在都是客戶的服務(wù)器,重新升級安裝了一下php的新版本就解決了。
但這樣卻提出了一個問題?
要么開發(fā)用mySQL函數(shù)方式,
要么開發(fā)用pdo而后升級php版本,
要么發(fā)現(xiàn)用pdo開發(fā)無法升級php版本,用mySQL函數(shù)方式重寫原有pdo方式代碼
看來開發(fā)用開發(fā)用mySQL函數(shù)方式 似乎又成了最好的解決辦法,這不又回到起始點,難道非要等到pdo都普及了再用 pdo開發(fā)么,如果這樣 就意味著我的php課程將教授學(xué)生一個已經(jīng)開始淘汰的開發(fā)方式,學(xué)生學(xué)習(xí)完以后,幾年內(nèi)又要不得不放棄已經(jīng)習(xí)慣的mySQL函數(shù)開發(fā)方式,再適應(yīng)新的pdo開發(fā)方式。
有沒有一個折中方案,既可以讓學(xué)生學(xué)到新的pdo開發(fā)方式,在工作中又可以應(yīng)對老得mySQL函數(shù)開發(fā)方式呢?那天學(xué)生問起 忽發(fā)奇想寫個類,類的方法都是pdo的方式,然后將mySQL函數(shù)的操作 都封裝到 這個類的方法里不就可以了么。
解決初衷 是開發(fā)是都采用pdo方式操作,如果需要mySQL函數(shù)方式 只要將連庫的文件替換成mySQL函數(shù)連庫代碼,然后在后邊加上這個類 并實例化對象為pdo的那個操作對象不就可以實現(xiàn)pdo方式改為mySQL函數(shù)方式了
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;
?>
查詢代碼如下:
view plaincopy to clipboardprint?
<?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 />";
}
?>
大家會發(fā)現(xiàn)我在連庫文件后 ,添加了2行代碼(當(dāng)然工作時將這兩行寫在連庫文件里剛好了)
require ’./Deep.Class.MySQLfunction4PDO.php’;
$db = new Deep_MySQLfunction4PDO();
require ’./Deep.Class.MySQLfunction4PDO.php’;$db = new Deep_MySQLfunction4PDO();
這樣通過 Deep_MySQLfunction4PDO類我就實現(xiàn)了不用更改現(xiàn)有的pdo代碼,實現(xiàn)MySQL函數(shù)方式的操作了
Deep_MySQLfunction4PDO類文件代碼如下:
view plaincopy to clipboardprint?
<?php
/*
模仿pdo方式的一個mysql函數(shù)的操作類。
調(diào)用:在mysql連庫函數(shù)后調(diào)用
require ’./Deep.Class.MySQLfunction4PDO.php’;
$db = new Deep_MySQLfunction4PDO();
*/
// 仿 PDO class
class Deep_MySQLfunction4PDO{
//插入 刪除 修改
public function exec($sql){
@mysql_query( $sql ) or die("SQL語句執(zhí)行錯誤!");
return mysql_affected_rows();
}
//查詢
public function query($sql){
$stmt=new Deep_MySQLfunction4PDO_stmt();
$stmt->query=@mysql_query( $sql ) or die("SQL語句執(zhí)行錯誤!");
return $stmt;
}
}
// 仿 PDOStatement class
class Deep_MySQLfunction4PDO_stmt{
var $query;
public function fetch(){
return mysql_fetch_array($this->query);
}
}
?>
前一段時間課程比較多 今日周末有空 整理記錄如上, 又有學(xué)生提出 仿pdo的類遇到查詢 不用這個while($row =$stmt->fetch())用foreach( $stmt as $row)不行 我這改了改這個類實現(xiàn)了,這是那個代碼寫法有些古怪 待我有空再 整理 做這篇文章的后續(xù)說明吧