2.使用PDO抽象层与数据库通信
PDO中文简称数据对象, 英文全称:PHP Database Object
PDO数据库访问抽象层是统一各种数据库的访问接口、是PHP应用中的一个数据库抽象层规范
PDO提供了一个统一的API接口, 可以使得你的PHP应用不去关心具体要连接的数据库服务器系统类型
通俗点说, 也就是如果你使用PDO的API,可以在任何需要的时候 无缝切换数据库服务器,比如从Firebird到MySQL,仅仅需要修改很少的PHP 代码就可以办到! 是不是很方便呢 ?
小提示: 利用 PDO 扩展自身并不能实现任何数据库功能, 注意是功能! 必须使用一个具体数据库的PDO驱动来访问想要的数据库服务(它只是一个接口规范)
但是一个接口提供的兼容性越强,它的定制性、特异性就相应越弱(这个应该不难理解吧)
PDO接口API的主要缺点是会限制让你不能使用MySQL服务端提供所有的数据库高级特性。
比如,PDO不允许使用MySQL支持的多语句执行, 如下图
在PHP5中,PDO目前已经支持大量数据库, 例如
1. sqlite
2. mysql
3. pgsql
4. mssql
...
PDO是基于PHP扩展框架实现的,它的源码在PHP目录的ext/php_pdo_*
再一次强调,PDO只是一个接口规范,它自身并不实现任何的数据库功能,开发者必须使用一个具体数据库的"PDO驱动"来访问特定的数据库
php_pdo_mysql扩展
PDO连接MySQL要在php.ini中的配置参数是: extension=php_pdo_mysql.dll 这个配置必须要打开才能连接MySQL服务
基本使用案例如下
$dbhost="主机名";
$dbname="数据库名称";
$dbusr="用户名";
$dbpwd="密码";
$dbhdl=NULL;
$dbstm=NULL;
//连接数据库参数配置
$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',);
$dsn='mysql:host=' . $dbhost . ';port=3306;dbname=' . $dbname;
try
{
$dbhdl = new PDO($dsn, $dbusr, $dbpwd, $opt);
//设置属性 错误报告 和 错误抛出异常
$dbhdl->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}
catch (PDOExceptsddttrtion $e)
{
//return PDOException
print "Error!: " . $e->getMessage() . "
";
die();
}
// 执行SQL语句,将结果集作为PDOStatement对象返回
$dbstm = $dbhdl->query('SELECT * from p8_ad_user LIMIT 0,1');
//从包含的结果集当中取出所有行并且返回数组
$rows = $dbstm->fetchAll(PDO::FETCH_ASSOC);//也可以使用$rows = $dbhdl->Fetch();
//打印结果
print_r($rows);
php_pdo_pgsql扩展
extension=php_pdo_pgsql.dll
PDO连接PostgreSQL 要在php.ini中的配置参数是: extension=php_pdo_pgsql.dll 这个配置必须要打开才能连接PostgreSQL 服务
这个其实我也没怎么常用!
基本使用案例如下
$host = "主机地址";
$user = "用户名";
$pass = "密码";
$db = "数据库名称";
$cursor = "cr_123456";
try
{
//连接配置
$dbh = new PDO("pgsql:host=$host;port=5432;dbname=$db;user=$user;password=$pass");
echo "Connected";
}
catch (Exception $e)
{
echo "Unable to connect: " . $e->getMessage() ."
";
}
$dbh->beginTransaction();
//执行查询
$query = "SELECT * from p8_ad_user LIMIT 0,1";
$dbh->query($query);
$query = "FETCH ALL IN \"$cursor\"";
echo "begin data
";
//遍历结果
foreach ($dbh->query($query) as $row)
{
echo "$row[0] $row[1] $row[2]
";
}
echo "end data";
这里只简单的说一说Mysql、PostGreSQL的案例,事实上php无法下载文件到本地,PDO这种抽象层方式可以访问目前主流的大多数的数据库
3.使用ODBC抽象层与数据库通信ODBC基本介绍
ODBC在PHP的手册上基本上都全是英文的 所以对一些英文不好的小白可能不太友好 ,在这里我也简单的说一下
ODBC的英文全称 (Open Database Connectivity) 是一种开放数据库互连 也就是一个应用程序编程接口(Application Programming Interface,简称API),使我们有能力连接到某个数据源、它为编写关系数据库的客户软件提供了一种统一的接口。
使用ODBC API 的应用程序可以与任何具有ODBC驱动程序的关系数据库进行通信、
ODBC 是为客户应用程序访问关系数据库时提供的一个标准的接口、对于不同的数据库php无法下载文件到本地,ODBC 提供了统一的 API,使用该 API 来访问任何提供了 ODBC 驱动程序的数据库
图解如下
总的来说和之前说的扩展API接口、PDO抽象层 略有不同,使用ODBC连接数据库要稍微麻烦一点
使用ODBC需要对目标数据库服务器的操作系统进行一些配置,即创建ODBC数据源,然后才可以进行ODBC连接, 就如同上面的图中 我们要在接口驱动程序管理器中配置ODBC数据源, 比如我们要使用ODBC连接MySQL就要先安装MySQL的ODBC驱动程序!
MySQL ODBC驱动安装和配置数据源
第一步
驱动程序下载地址选择适合自己电脑版本(我的操作系统是Win10,64位)
进入下载界面后,我们不登录(Login)也不注册(Sign Up)。直接点左下角的【No thanks,just start my download.】即可开始下载。
下载完安装包后,双击打开安装包,按照默认选项进行安装即可。
第二步
配置数据源
打开控制面板\所有控制面板项\管理工具\ODBC 数据源
在控制面板下的管理工具,找到ODBC数据源后 双击打开
在【用户DSN】选项卡中单击【添加】按钮,然后选择MySQL ODBC 8.0 Unicode Driver 单击完成!
注意 :这里要说明一下“MYSQL ODBC 8.0 ANSI Driver”和“MySQL ODBC 8.0 Unicode Driver”的区别: ①MySQL ODBC 8.0 ANSI Driver 只针对有限的字符集的范围; ②MySQL ODBC 8.0 Unicode Driver 提供了更多字符集的支持,也就是提供了多语言的支持
单击完成后会弹出填写配置信息对话框 前两个选项可根据项目功能信息填写, 然后按具体情况填写TCP/IP Server和Port, 然后是MySQL用户名、密码、数据库名称。
Data Source Name: //数据源名称,可自拟(最好跟项目功能挂钩)
Description: //关于此数据源的描述,主要功能等,可不填写
TCP/IP Server: //服务器名称,可以是机器名,也可以是IP地址;若是本地可填写“localhost”
Port: //MySQL服务的端口号,默认是3306,也可在安装MySQL时自己设定
User: //用户名,默认是root,也可在安装MySQL时自己设定
Password: //密码
Database: //数据库名称
填写完后可点击【Test】按钮,测试一下连接是否配置成功!如果成功会有连接成功的提示!
若测试成功,再点击 OK 按钮即可!在用户DSN处即可查看到最新创建的ODBC
到这里就配置好了 MySQL ODBC驱动程序了
PHP用ODBC连接MySQL
首先检查PHP目录下的php.ini中,extension=odbc 扩展是否打开!
代码案例如下:
$dsn="Driver={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Database=shop;charset=utf8";
$conn_odbc = odbc_connect($dsn, "root", "密码");
//如果SQL命令执行成功,则返回ODBC结果标识符
$row = odbc_do($conn_odbc,"SELECT * FROM test4");
//获取数据总条数
$odbc_num_rows = odbc_num_rows($row);
echo "找到记录数量:".$odbc_num_rows;
echo "
";
//从标识当中判断是否有行
if (odbc_fetch_row($row)){
//获取结果数据
echo '名称:'.odbc_result($row,"brand");
echo '
';
echo '颜色:'.odbc_result($row,"color");
}
特别注意: 编码的一定要统一!
总结
版权声明
本文仅代表作者观点。
本文系作者授权发表,未经许可,不得转载。
发表评论