文档章节

php中mysql和mysqli的区别

Amamatthew
 Amamatthew
发布于 2014/08/31 12:58
字数 1189
阅读 100
收藏 0

做网站的过程中,PHP中一般是使用MYSQL还是使用MYSQLI?

使用mysql得多,其实mysqli也使用mysql数据库,只不过是在mysql的基础上作了优化,速度要比mysql快,只是大家还没有习惯而已。

mysqli.dll是PHP对mysql新特性的一个扩展支持。在PHP5中可以在php.ini中加载。

mysql后面的i,指improved, interface, ingenious, incompatible or incomplete(改进的扩展仍在开发中,因为MYSQL4。1和MYSQL5都没有正式推出尚在开发中,新的特性没有完全实现)

mysqli想实现的目标具体有:

-更简单的维护
-更好的兼容性
-向后兼容

mysql(指PHP中的模块)发展到现在显得比较凌乱,有必要重新做一下整理。同时,有必要跟上MYSQL(DBMS)的发展步伐,加入新的特性的支持,以及适应MYSQL(DBMS)以后的版本。所以诞生了mysqli.dll

mysqli.dll的特性:

-可以和mysql.dll一样的方式使用
-支持OO接口,简单调用
-支持MYSQL4。1引入的新特性
-通过mysqli_init() 等相关函数,可以设置高级连接选项

mysql与mysqli的区别:mysqli连接是永久连接,而mysql是非永久连接。   

mysql连接:每当第二次使用的时候,都会重新打开一个新的进程。   
mysqli连接:一直都只使用同一个进程。   

好处:这样就可以很大程度的减轻服务器端压力。当然,如果mysql也需要永久连接的话,就可以使用mysql_pconnect()这个函数   

mysqli的面向过程的使用:     

$conn = mysqli_connect('localhost', 'root', '123', 'db_test') or ('error'); 
$sql = "select * from db_table"; 
$query = mysqli_query($conn,$sql); 
while($row = mysqli_fetch_array($query)){ 
echo $row['title']; 
}

mysqli的面向对象的使用:     

$conn = mysqli('localhost', 'root', '123', 'db_test'); 
$sql = "select * from db_table"; 
$query = $conn->query($sql); 
 while($row = $query->fetch_array()){ 
echo $row['title']; 
 }

mysql_connect与mysql_pconnect与mysqli_connect:

   mysql_pconnect打开的连接不会关闭(即使调用mysql_close也不会关闭,因为对其无效),类似于连接缓冲池,如果下次有来自于同一个机器的同一个用户名对同一个数据库的连接,php会自动使用上次已经建立的连接,而不需要再重新建立一个。

   好处:是省去了每次与数据库建立连接的开销,坏处:是需要浪费一些内存,占用一些连接,所以如果用户访问量大的时候会出现错误,要把mysql的max_connections参数改大一点, 或者使用mysql_connect()就解决问题。

   简单的来说MySQL_pconnect是用来在php与MySQL间建立一条持续连接,一般php的执行模式是脚本开始执行时初始化所有资源, 脚本运行结束后释放所有资源.而MySQL_pconnect的方式则不这样, MySQL_connect每次都是重新通过tcp 等跟sql服务器建立关系, 每次连接都是要消耗不少服务器资源的.

   使用pconnect时, 有请求连接MySQL时, php会检查是否之前有条相同的连接(以相同的用户名密码连接到同一个MySQL服务器)已经建立,如果有的话就直接使用这条连接,值得注意的是这个相同的连接的概念是对进程来说的,不同的进程连接 MySQL_pconnect建立会建立起多条连接.

   connect与pconnect不会带来功能的差异, 只有性能上的差别.

   一般php有俩种运行模式, 一是作为cgi运行, 二是作为apache的模块运行.

   作为cgi的时候connect跟pconnect没什么不同, 因为每次cgi进行运行结束后都会被销毁清理掉资源.

   php作为apache模块方式运行时, 可以使用到数据库持续连接, 但可能会存在潜在的问题,看php手册,如果你是cgi安装方式。pconnection永远也不会生效。

   长连接最大的缺点就是万一一个用户锁死,当前进程就永久锁死了。

   假如你在apache里的设置是进程永不销毁的话就……

   也就是说尽量使用mysql_connect,因为运行结束后会自动中断,也可以使用_connect和mysql_pconnect一起使用,就好像一个链接缓冲池一样,也就是说建立一个有mysql_connect 和 mysql_pconnect的类。

  当然,如果不考虑向下兼容的话,最好还是使用mysqli_connect,因为mysqli本身就是永久性连接。 至于mysqli的优点,就不多做介绍了。      

本文转载自:http://www.dedecms.com/knowledge/data-base/mysql/2012/0819/7201.html

下一篇: Zend Studio
Amamatthew
粉丝 67
博文 1050
码字总数 76443
作品 0
厦门
后端工程师
私信 提问
PHP-MySQL连接问题

在使用PHP去连接MySQL数据库时,有三种(流行的)方法: PHP-MySQL, PHP-MySQLi, PDO, 有一些需要注意的地方: 1, 当我们谈论MySQL的时候,更多的是指关系型数据库; 2,PHP-MySQL和PHP-MySQLi是...

vinci321
2018/03/08
28
0
(四)PHP扩展PDO和Mysqli对比分析与总结归纳

(四)PHP扩展PDO和Mysqli对比分析与总结归纳 我的系统版本为CentOS7.5,PHP Version 7.1.18 php操作mysql数据库,常用的三种驱动扩展:mysql、mysqli、pdo,其中mysql在php7之后去掉了。重点...

Super_RD
04/24
0
0
使用mysqli方式进行数据库查询

一、mysql与mysqli的概念相关: 1、mysql与mysqli都是php方面的函数集,与mysql数据库关联不大。 2、在php5版本之前,一般是用php的mysql函数去驱动mysql数据库的,比如mysqlquery()的函数,...

AwesomeQA
2016/04/21
101
0
PHP连接Mysql常用API(mysql,mysqli,pdo)的区别

什么是API? 一 个应用程序接口(Application Programming Interface的缩写),定义了类,方法,函数,变量等等一切 你的应用程序中为了完成特定任务而需要调用的内容。在PHP应用程序需要和数...

Junn
2014/03/03
4.6K
1
PHP 学习必备技能(基础略过)

1.面向对象编程 面向对象编程基本概念 类和对象的关系 如何定义类 成员属性(变量) 如何创建对象实例及如何访问对象属性 对象在内存中存在的形式 栈、堆、全局区、常量区和代码区的关系 成员方...

风雪中的舞者
2015/08/05
100
0

没有更多内容

加载失败,请刷新页面

加载更多

Handler消息传递机制分析

Handler的用途和用法 写过Android程序的人大概都会遇到ANR(Application Not Responding)。如果程序在一段时间内没有响应,系统就会弹出一个对话框,让用户选择继续等待还是强制关闭应用。为...

tommwq
今天
5
0
JS前端MD5加密

Bootstrap官网获得md5 js地址:https://www.bootcdn.cn/blueimp-md5/ <!--MD5加密--><script src="https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.js"></script> 使用方法: md5(pwd)......

被毒打的程序猿_先瑞
今天
6
0
BigDecimal 去后面无用的0的方法

BigDecimal a=new BigDecimal("0.1000"); System.out.println(a.stripTrailingZeros().toPlainString());...

xiaodong16
今天
7
0
JAVA--高级基础开发

[集合版双色球] 十二、双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球号码从1—33中选择;蓝色球号码从1—16中选择;请随机生成一注双色球号码。(要求同色号码...

李文杰-yaya
昨天
25
0
聊聊rocketmq broker的CONSUMER_SEND_MSG_BACK

序 本文主要研究一下rocketmq broker的CONSUMER_SEND_MSG_BACK CONSUMER_SEND_MSG_BACK rocketmq/common/src/main/java/org/apache/rocketmq/common/protocol/RequestCode.java public class......

go4it
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部