导航:首页 > 编程语言 > phpmysqlmysqlnd

phpmysqlmysqlnd

发布时间:2024-12-25 20:13:26

㈠ 如何在php7中安装mysql的扩展

如何在PHP7中安装mysql的扩展
1,去php网站上下载mysql扩展
2,解压并使用phpize工具初始化,编译:
#解压
tar xzvf mysql-45881bd.tar.gz
#进入mysql扩展目录
cd mysql-45881bd/
#使用phpize初始化,我的phpize在/opt/目录
/opt/php/bin/phpize
#编译mysql扩展,使用mysql native driver作为mysql链接库
./configure --with-php-config=/opt/php/bin/php-config --with-mysql=mysqlnd
make && make install
5,编辑php.ini文件,把mysql.so拷贝到php.ini的extension_dir中,然后在php.ini中加入extension=mysql.so
6,重启php

㈡ centos 6.0安装php-5.2.17报错: 前提是mysql已经安装,已经成功启动OK

1、no mysql_config not found configure: error

2、你的配置
--with-mysql=/usr/local/mysql
--with-mysqli=/usr/local/mysql/bin/ mysql_config 查查这个地方,似乎有个空格
--with-mysql-sock=/tmp/mysql.sock

3、确认已经安装mysql-devel
rpm -qa|grep mysql-devel
4、如果php5.3可以用mysqlnd (MySQL native driver for PHP)
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd

㈢ PHP + Mysql多个表并行查询如何实现

在PHP-FPM处理HTTP请求时,有时会遇到一个请求需要进行多次MySQL查询(在报表类应用中比较常见)。通常我们会以串行方式查询:

$link=newmysqli();
$rs1=$link->query('SELECT*FROMtable1');
while($row=$rs1->fetch_row()){...}
$rs2=$link->query('SELECT*FROMtable2');
while($row=$rs2->fetch_row()){...}
$rs3=$link->query('SELECT*FROMtable3');
while($row=$rs3->fetch_row()){...}

串行查询方式有个缺点:在MySQL返回数据之前,PHP一直是处于空等的状态,不会继续往后执行。如果数据量大或者查询复杂,MySQL响应可能会比较慢,那么以串行方式查询会有一些延迟。给用户最直接的感受就是 Loading… 的圈圈一直打转。

那么有什么办法可以减少查询MySQL的时间?用多进程并行查询不行,因为PHP-FPM 中不允许用 pcntl_fork 一类的调用。

幸好还有 mysqlnd,mysqlnd提供了类似 stream_select 的机制(见 这篇文章) ,可以做到在单进程中对MySQL并行查询。这主要运用了mysqli_poll 和 reap_async_query 两个函数。

还是通过例子来介绍MySQL并行查询的实施方法。假设要并行地向MySQL发出10个查询,最基本的代码应该是这样的:

1.$links=[];
2.for($i=0;$i!==10;$i++){
3.$links[$i]=newmysqli('127.0.0.1','user','password','db1');
4.$links[$i]->query('SELECTSLEEP(1)',MYSQLI_ASYNC);
5.}
6.$allResult=[];
7.while(!empty($links)){
8.$reads=$links;
9.$errors=$reject=[];
10.if(!mysqli_poll($reads,$errors,$reject,null)){
11.continue;
12.}
13.foreach($readsas$read){
14.$idx=array_search($read,$links,true);
15.$allResult[$idx]=[];
16.$result=$read->reap_async_query();
17.while($row=$result->fetch_row()){
18.$allResult[$idx][]=$row;
19.}
20.$read->close();
21.unset($links[$idx]);
22.}
23.}

解释下这段代码的含义:

2~5行,同时发起10个MySQL连接,并发出查询

注意query() 的第二个参数带上了 MYSQLI_ASYNC 表示非阻塞查询

10行,使用mysqli_poll 轮询10个连接的查询有无返回

mysqli_poll 的第一个参数$reads是个数组,包含需要轮询那些连接。mysqli_poll 执行完后,会改写$reads,改写后$reads包含的是那些已经有数据返回连接。

mysqli_poll的第四个参数,控制的是轮询的等待时间,单位是“秒”。如果像本例当中设置为null,那么mysqli_poll轮询是阻塞的:只有监听的连接中,任意一个连接有数据返回了,mysqli_poll才会返回。如果等待时间设置为0,那么每次执行mysqli_poll会立即返回,外层的while会频繁循环。

第11~19行,遍历已经有数据返回的连接

reap_async_query和普通query一样,返回的是mysqli_result,可以一行行fetch数据

20~21行,对于已经获得了数据的连接,下次mysqli_poll就不需要再轮询这个连接了,所以关闭连接,并从$links数组删除这个连接

当所有的连接都返回了数据,$links数组空了,while循环也就终止了。

使用并行查询的方式,可以大大缩短处理HTTP请求的时间,假设本例中的10个SQL查询,每个需要执行1秒。因为是并行,处理所有的查询,也只需要1秒左右。

阅读全文

与phpmysqlmysqlnd相关的资料

热点内容
linux30下载 浏览:596
活塞式制冷压缩机的分类有哪些 浏览:719
农业app哪个最出名 浏览:262
安卓打游戏都是用什么录屏 浏览:930
107区的服务器是什么 浏览:658
非对称加密的加密签名的过程 浏览:443
mysqlinsert命令 浏览:198
电脑盘加密码打开后怎么锁起来 浏览:174
安卓系统是什么代码编译的 浏览:295
解压单车模拟器游戏 浏览:501
应用程序员需要懂很多硬件知识吗 浏览:396
我的世界服务器110地址大全 浏览:624
怎么qq相册加密自己也不能看 浏览:22
linuxc语言串口数据 浏览:857
mac下编写python 浏览:973
厚衬衣程序员 浏览:743
一年级编程精彩内容 浏览:578
cc2540编程 浏览:794
越南离北京源码 浏览:639
服装展示网站源码 浏览:325