现在支持PHP5虚拟主机已经很多了,而且价钱都很便宜,可是支持PDO的却并不多!要知道PDO是PHP未来连接数据库的官方类,而且用着确实方便,必然取代其他非官方的数据库类,而且甚至可能取代官方的数据库连接函数,所以大家要早早习惯PDO。于是为了我自己能习惯它,又能在不支持PDO的廉价虚拟主机上使用,写了这个半成品的模拟PDO类,希望有高手能指点一二,帮助完善之!
这是两个类的组合,单独一个用不了!
PDO是主类 Result也少不了
<?
php
/*
作者:夜无眠
QQ:27262681
*/
class PDO{
function __construct( $dsn , $user , $pass ){
preg_match ( " /host=(.*?)($| |;)/i " , $dsn , $d );
$host = $d [ 1 ];
preg_match ( " /dbname=(.*?)($| |;)/i " , $dsn , $d );
$dbname = $d [ 1 ];
$this -> conn = mysql_connect ( $host , $user , $pass );
mysql_select_db ( $dbname , $this -> conn);
}
function query( $sql ){
$this -> rs = mysql_query ( $sql , $this -> conn) or $this -> err = mysql_error ( $this -> conn);
if ( $this -> err){
return false ;
} else {
$rs = new Result( $this -> rs);
return $rs ;
}
}
function errorInfo(){
$r [ 2 ] = $this -> err;
return $r ;
}
}
class Result {
function __construct( $rs ){
$this -> rs = $rs ;
}
function fetch(){
return $r = mysql_fetch_array ( $this -> rs , MYSQL_ASSOC);
}
function fetchAll(){
while ( $r = mysql_fetch_array ( $this -> rs , MYSQL_ASSOC)){
$rs [] = $r ;
}
return $rs ;
}
}
?>
/*
作者:夜无眠
QQ:27262681
*/
class PDO{
function __construct( $dsn , $user , $pass ){
preg_match ( " /host=(.*?)($| |;)/i " , $dsn , $d );
$host = $d [ 1 ];
preg_match ( " /dbname=(.*?)($| |;)/i " , $dsn , $d );
$dbname = $d [ 1 ];
$this -> conn = mysql_connect ( $host , $user , $pass );
mysql_select_db ( $dbname , $this -> conn);
}
function query( $sql ){
$this -> rs = mysql_query ( $sql , $this -> conn) or $this -> err = mysql_error ( $this -> conn);
if ( $this -> err){
return false ;
} else {
$rs = new Result( $this -> rs);
return $rs ;
}
}
function errorInfo(){
$r [ 2 ] = $this -> err;
return $r ;
}
}
class Result {
function __construct( $rs ){
$this -> rs = $rs ;
}
function fetch(){
return $r = mysql_fetch_array ( $this -> rs , MYSQL_ASSOC);
}
function fetchAll(){
while ( $r = mysql_fetch_array ( $this -> rs , MYSQL_ASSOC)){
$rs [] = $r ;
}
return $rs ;
}
}
?>
上面的类提供的类方法很少,只是个半成品,下面是一个用法示例,跟PHP系统提供的PDO用法差不多!
<?
php
class MyPDO extends PDO{//调试程序时需要知道哪里出错了,所以加了这个!
function query( $sql ){
$rs = parent :: query( $sql ) or $err = $this -> errorInfo();
if ( $err ){
die ( $err [ 2 ]);
}
return $rs ;
}
}
$host = " localhost " ;
$dbname = " bbs " ;
$user = " root " ;
$password = "" ;
/*
try {
$db = new MyPDO("mysql:host=$host;dbname=$dbname",$user,$password);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
*/
$db = new MyPDO( " mysql:host=$host;dbname=$dbname " , $user , $password ) or die ( " cann't connect sever " );
$db -> query( " set names gb2312 " );
// --------------------------------------------------------------
$rs = $db -> query( " select * from g_book " );
while ( $rs1 = $rs -> fetch( 2 )){
$g_rs [] = $rs1 ;
}
print_r ( $g_rs );
?>
class MyPDO extends PDO{//调试程序时需要知道哪里出错了,所以加了这个!
function query( $sql ){
$rs = parent :: query( $sql ) or $err = $this -> errorInfo();
if ( $err ){
die ( $err [ 2 ]);
}
return $rs ;
}
}
$host = " localhost " ;
$dbname = " bbs " ;
$user = " root " ;
$password = "" ;
/*
try {
$db = new MyPDO("mysql:host=$host;dbname=$dbname",$user,$password);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
*/
$db = new MyPDO( " mysql:host=$host;dbname=$dbname " , $user , $password ) or die ( " cann't connect sever " );
$db -> query( " set names gb2312 " );
// --------------------------------------------------------------
$rs = $db -> query( " select * from g_book " );
while ( $rs1 = $rs -> fetch( 2 )){
$g_rs [] = $rs1 ;
}
print_r ( $g_rs );
?>