PDO链接多种数据库,封装个PDO类

时间:2022-12-11 08:38:20

<?php

$type = 'mysql'; //数据库类型
$db_name = 'test'; //数据库名
$host = '127.0.0.1';
$username = 'root';
$password = 'ready';

$dsn = "$type:host=$host;dbname=$db_name";
try {
$pdo = new PDO($dsn, $username, $password);
} catch (Exception $e) {
die('连接数据库失败!');
}
$stmt = $pdo->query('SELECT id, body FROM demo');
while ($row = $stmt->fetch()) {
echo "id=$row[0],body=$row[1]<br/>";
}
$pdo = null;
?>

此时,如果我们需要将数据库从MySQL迁移到DB2或者Oracle上,PHP程序中对应的改动就非常简单,其他地方无需多作更改,我们只需要将变量$type设置为ODBC或者OCI即可。
备注

到目前为止,PHP PDO扩展连接DB2,需要以ODBC方式连接,因此$type需设置ODBC。

PHP PDO扩展库只是一个数据访问的抽象接口,如果要连接不同的数据库,需要添加实现了PDO接口的对应数据库驱动。当然,PHP已经给我们准备好了一些数据库驱动扩展程序(存放在PHP安装目录/ext目录下),例如php_pdo_mysql.dll(用于MySQL)、php_pdo_oci.dll(用于Oracle)、php_pdo_odbc.dll(用于以ODBC形式访问的数据库)。虽然不同数据库驱动的底层实现不一样,但是对于我们开发人员来说,却是使用相同的方式来访问数据库,PDO在中间已经帮我们做了相应的转换处理工作。

在php.ini配置文件中,官方提供的默认配置并没有启用pdo扩展(mysql、mysqli扩展也没有启动,我们需要在php.ini中启用对应的pdo扩展库:

;需要使用何种数据库,就去掉配置文件对应行前面的注释符号";"
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll

更多PDO的相关用法,请参考PHP官方文档。


封装个PDO类:

<?php
/**
* 连接数据库及操作
*/
class linkMysql{
private $pdo=null;
private $dbms="mysql"; //数据库类型
private $host="localhost"; //服务器地址
private $name="root"; //登录账号
private $pwd="root"; //密码
private $Basename; //数据库名称
private $result; //结果集
function __construct($host,$name,$pwd,$Basename){
$this->host=$host;
$this->name=$name;
$this->pwd=$pwd;
$this->Basename=$Basename;
$type=$this->dbms;
$dbname=$this->Basename;
$host=$this->host;
$dsn="$type:host=$host; dbname=$dbname";
$this->pdo=new PDO($dsn,$this->name,$this->pwd);
try{
$sql=" SET NAMES 'utf8'";
if ($this->pdo-> query($sql)==false) {
echo "<script>alert('失败');</script>";
}
}catch(Exception $e){
echo $e->getMessage()."<br>";
}
}
/*
获取结果集
*/
public function get_result(){
return $this->result;
}
/*
查询结果
*/
public function mysql_query_rest($sql){
if ($sql!='') {
$this->result=$this->pdo->query($sql);
return $this->result;
}
}
/*
执行sql语句 增删改差
*/
public function actionsql($sql){
if ($sql!='') {
if ($this->pdo->exec($sql) )
return true;
else
return false;
}
}

}
$mydabase=new linkMysql("localhost","root","1234","MyJDL");

?>