导航:首页 > 编程语言 > 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相关的资料

热点内容
51单片机控制pwm程序 浏览:295
汽车压缩机串气可以修么 浏览:633
30天学会全部语法pdf 浏览:52
java反编译修补bug 浏览:614
如何修改服务器ftp地址 浏览:119
云服务器如何用c盘分d盘 浏览:597
苹果的单片机 浏览:804
程序员喝麻辣烫 浏览:140
安卓怎么玩微软的游戏 浏览:54
安卓如何在桌面同时操作好几个app 浏览:72
美国app在哪里看 浏览:320
java文件内容追加 浏览:622
为什么下载压缩包会变成文档 浏览:727
自我安慰程序员的话 浏览:369
android备份程序 浏览:713
建设银行亚洲手机app哪里下载 浏览:502
桌面有一个文件夹图标变透明了 浏览:382
vb文件如何加密 浏览:238
中行选择编译环境 浏览:248
编程打左右双引号 浏览:719