首页 » PHP教程 » phpconnect技巧_PHP数据库驱动扩展概述与不合办法连接数据库总结

phpconnect技巧_PHP数据库驱动扩展概述与不合办法连接数据库总结

访客 2024-10-28 0

扫一扫用手机浏览

文章目录 [+]

PHP数据库驱动的简介

PHP连接数据库的不同办法案例比较

phpconnect技巧_PHP数据库驱动扩展概述与不合办法连接数据库总结

PHP数据库驱动简介

phpconnect技巧_PHP数据库驱动扩展概述与不合办法连接数据库总结
(图片来自网络侵删)

这里的驱动是指的一段特定类型的数据库做事器进行交互的软件代码。
驱动可能会调用一些库。
类似于Java中的数据库驱动的观点

实在也便是数据库厂商供应的数据库操作二进制代码库!

例如: Oracle中的oci.dll、

PHP数据库驱动

数据库驱动位于PHP和数据库进行通信的最底层,这一层便是数据库驱动层, 不同的数据库厂商都会在基于某个框架的条件下实现自己的驱动,用以供应基本功能、以及特天命据库的高等功能

PHP连接器

在数据库驱动层之上是 连接器、或者叫适配器抽象层,或者普通点叫连接层、用于PHP代码和数据库进行连接,

比如PHP开拓者可以利用PDO(PHP Database Object)、或者直策应用扩展接口(mysql、mysqli) 这些暴露出来的API函数来与底层数据库进行通信。

数据库驱动层、连接器 、PHP代码运用层 图如下

小知识:文件类型数据库

文件型是一种基于文件的数据库引擎,而且利用文件I/O(输入/输出)函数来存储和读取来自磁盘上文件的数据库。
它普遍也比关系型数据库(例如Mysql)小很多! (例如范例的文件型数据库SQLite命令行版本的大小小于200KB)同时,文件型数据库支持你所熟习的大部分SQL命令,同时具有易于携带的特点

PHP连接数据库的不同办法、以及不同业务场景下的优缺陷

1.利用扩展API接口与数据库通信

PHP代码是由一些可选扩展组成的核心功能

PHP 的MySQL数据库干系扩展,比如mysqli,mysql都是基于PHP扩展框架实现的

这些扩展的浸染便是暴露一个API给PHP程序员, 许可扩展自己的功能可以被程序员利用

当然,也有一部分基于PHP扩展框架 开拓的扩展不会给PHP程序员暴露API接口。
比如说PDO MySQL驱动扩展,就没有向PHP程序员暴露API接口,但是向它上层的PDO层供应了一个接口

在实际编程中,利用频度最多的还是以扩展API的办法去连接数据库

mysql扩展

小伙伴是不是常常修正php.ini文件的时候瞥见了extension=php_mysql.dll 这个东西呢 它便是一个mysql扩展,

这是开拓时许可PHP运用与MySQL数据库交互的早期扩展 , mysql扩展供应了一个面向过程的接口,并且是针对MySQL4.1.3或更早版本设计的。

mysql扩展的位置是在早期的5.x版本的PHP目录下的ext/mysql.dll

因此,这个扩展虽然可以与MySQL4.1.3或更新的数据库做事端进行交互,但并不支持后期最新的MySQL做事端供应的一些特性以及功能, 所往后来大家在现在的php7.x当中就看不见mysql.dll这个扩展了 被官方取消了!

######

//连接数据库 $link = mysql_connect('主机地址', '数据库用户名', '密码') or die('Could not connect: ' . mysql_error()); echo 'Connected successfully'; //选择数据库 mysql_select_db('数据库名称') or die('缺点信息'); // 实行 SQL 查询 $query = 'SELECT FROM 表名称'; $result = mysql_query($query) or die('缺点信息' . mysql_error());​ // 以 HTML 打印查询结果​ echo "<table>\n";​ //循环的从结果集当中一条一条的获取数据 渲染遍历输出! while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n";​ //开释结果集 mysql_free_result($result);​ //关闭连接 mysql_close($link);

mysqli扩展

mysqli扩展,我们有时称之为MySQL增强扩展,可以用于利用MySQL4.1.3或更新版本中新的高等特性, 以是大家能够在php7.x的ext扩展目录中找到php_mysqli.dll 这个扩展, mysqli扩展在PHP 5及往后版本中都会包含!

mysqli扩展有一系列的上风,相对付mysql扩展的提升紧张有如下:

. 面向工具接口 可以理解成有面向工具的办法来书写代码. prepared语句支持(即参数编译预处理,可以有效防御SQL注入的发生). 多语句实行支持. 事务支持. 增强的调试能力. 嵌入式做事支持. 在供应了面向工具接口的同时也供应了一个面向过程的接口。

以是这也大大提高了开拓者的可选择性. 和性能的优胜性

mysqli扩展是利用PHP扩展框架构建的,它的在PHP目录下的ext/mysqli.dll中

利用案例

$con = new mysqli("数据库主机名", "用户名", "密码", "数据库名称"); / check connection /​ //判断返回的值是否大于0 大于0就解释有缺点 if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } //预处理SQL $sql = "select name from users where name = ? and pass = ?"; $cmd = $con->prepare($sql); //吸收数据 $name = $_GET['name']; $pass = $_GET['pass'];​ //向sql查询添加绑定参数 $cmd->bind_param("ss", $name, $pass); //实行准备好的预处理查询语句 $cmd->execute(); //将变量绑定到准备好的语句以进行结果存储, 实在便是拿一个变量来保存结果 $cmd->bind_result($result); //将准备好的语句的结果提取到绑定变量中 $cmd->fetch(); //判断结果是否已经存在? 存在就打印出来 if($result) { var_dump($result); }

mysqli除了可以利用参数编译预处理来进行数据库的信息通信交互,同时也兼容利用面向过程的编码办法

这个就看开拓者的个人习气而定了 你喜好这么利用就怎么利用

利用案例

/ 连接数据库做事器 / $link = mysqli_connect( '连接MySQL地址', / The host to connect to 连接MySQL地址 / '用户名', / The user to connect as 连接MySQL用户名 / '密码', / The password to use 连接MySQL密码 / '连接数据库名称'); / The default database to query 连接数据库名称/ //判断是否成功 失落败输出失落败缺点代码 if (!$link) { printf("Can't connect to MySQL Server. Errorcode: %s ", mysqli_connect_error()); exit; } / 向做事器发送查询SQL语句要求/ if ($result = mysqli_query($link, 'SELECT from 表名称')) { / 返回查询的结果 并遍历结果集 一条一条的循环遍历输出 / while( $row = mysqli_fetch_assoc($result) ) { printf("%s (%s) ", $row['字段名'], $row['字段名']); } / 结束查询开释内存/ mysqli_free_result($result); } / 关闭连接/ mysqli_close($link);

PHP还支持很多其他的数据库连接扩展,利用方法都类似,只要遵照函数调用规范即可!

更多详情参考官方文档: https://www.php.net/manual/zh/refs.database.php

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. sqlite2. mysql3. pgsql4. 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() . "<br>"; 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<p>"; } catch (Exception $e) { echo "Unable to connect: " . $e->getMessage() ."<p>"; } $dbh->beginTransaction(); //实行查询 $query = "SELECT from p8_ad_user LIMIT 0,1"; $dbh->query($query); $query = "FETCH ALL IN \"$cursor\"";​ echo "begin data<p>"; //遍历结果 foreach ($dbh->query($query) as $row) { echo "$row[0] $row[1] $row[2] <br>"; } echo "end data";

这里只大略的说一说Mysql、PostGreSQL的案例,事实上,PDO这种抽象层办法可以访问目前主流的大多数的数据库

3.利用ODBC抽象层与数据库通信ODBC基本先容

ODBC在PHP的手册上基本上都全是英文的 以是对一些英文不好的小白可能不太友好 ,在这里我也大略的说一下

ODBC的英文全称 (Open Database Connectivity) 是一种开放数据库互连 也便是一个运用程序编程接口(Application Programming Interface,简称API),使我们有能力连接到某个数据源、它为编写关系数据库的客户软件供应了一种统一的接口。

利用ODBC API 的运用程序可以与任何具有ODBC驱动程序的关系数据库进行通信、

ODBC 是为客户运用程序访问关系数据库时供应的一个标准的接口、对付不同的数据库,ODBC 供应了统一的 API,利用该 API 来访问任何供应了 ODBC 驱动程序的数据库

图解如下

总的来说和之前说的扩展API接口、PDO抽象层 略有不同,利用ODBC连接数据库要轻微麻烦一点

利用ODBC须要对目标数据库做事器的操作系统进行一些配置,即创建ODBC数据源,然后才可以进行ODBC连接, 就犹如上面的图中 我们要在接口驱动程序管理器中配置ODBC数据源, 比如我们要利用ODBC连接MySQL就要先安装MySQL的ODBC驱动程序!

MySQL ODBC驱动安装和配置数据源

第一步

驱动程序下载地址https://dev.mysql.com/downloads/connector/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 "<br>";​//从标识当中判断是否有行if (odbc_fetch_row($row)){ //获取结果数据 echo '名称:'.odbc_result($row,"brand"); echo '<br>'; echo '颜色:'.odbc_result($row,"color");}

特殊把稳: 编码的一定要统一!

总结

差不多了吧。

以上便是PHP连接数据库的不同办法

目前PHP开拓中主流利用的连接数据库的技能是1. Mysqli扩展API2. PDO抽象层

​"点赞" "评论" "收藏"​

大家的支持便是我坚持下去的动力!

如果以上内容有任何缺点或者不准确的地方,欢迎不才面 留个言指出、或者你有更好的想法,欢迎一起互换学习

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0