当前位置:首页 » 编程语言 » phpmysql遍历

phpmysql遍历

发布时间: 2024-12-09 19:09:46

‘壹’ php读取MYsql数据库读取出来的数据怎么控制一行显示一条数据

使用mysql函数,mysql_fetch_row();这样就能逐行读取

‘贰’ 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秒左右。

‘叁’ php 怎么读取mysql一条数据并输出某一字段

可以参考下面的代码:

//连接数据库服务器

$link =mysql_connect(‘host(服务器ip地址,本地用localhost)’,'数据库账户',‘数据库密码’);

//选择要连接的数据库

mysql_select_db('数据库名字');

//执行查询,返回数据源

$query = mysql_query("SELECT * FROM test");

//遍历数据源,并赋值给$r,当没有数据时,变成false中断循环

while($r = mysql_fetch_array($query)){

echo $r['field_name'];//输出字段

}

(3)phpmysql遍历扩展阅读:

mysql使用说明

1、如果是用 MySQL +Apache,使用的又是FreeBSD网络操作系统的话,安装时候应按注意到FreeBSD的版本问题,在 FreeBSD 的 3.0 以下版本来说,MySQL Source 内含的 MIT-pthread 运行是正常的,但在这版本以上,必须使用 native threads,也就是加入一个 with-named-thread-libs=-lc_r 的选项。

2、如果在 COMPILE 过程中出了问题,请先检查gcc版本是否在 2.81 版本以上,gmake 版本是否在3.75以上。

3、如果不是版本的问题,那可能是内存不足,请使用 ./configure--with-low-memory 来加入。

4、如果要重新做configure,那么可以键入rmconfig.cache 和 make clean 来清除记录。

5、把 MySQL 安装在 /usr/local 目录下,这是缺省值,也可以按照需要设定所安装的目录。

‘肆’ php mysql_fetch_assoc 循环遍历表格

有2个办法,第一种直接使用sql的多表联查,效率高,但是得到的数据table1会被扩展成table2一样的条目数 要再次处理

select*fromtable1a,table2bwherea.orderid=b.orderid

第二种方法,先得到table11的数据,在循环中匹配table2到一个新的列名中

$conn=mysqli_connect("127.0.0.1","root","123","test");
$sql="select*fromtable1";
$rs=mysqli_query($conn,$sql);
$Arr=array();
while($row=mysqli_fetch_assoc($rs)){
$sql="select*fromtable2whereorderid=".$row["orderid"];
$row["order_sku"]=mysqli_fetch_all(mysqli_query($conn,$sql),MYSQLI_ASSOC);
$Arr[]=$row;
}
print_r($Arr)

如果你是刚开始学php 建议直接抛弃mysql用mysqli 因为PHP5.5已经废弃mysql方法了

热点内容
手机配置内存颜色怎么看 发布:2025-02-05 12:47:36 浏览:198
电脑服务器盘口顺序 发布:2025-02-05 12:40:20 浏览:663
mcpe服务器怎么开 发布:2025-02-05 12:40:13 浏览:835
linux文件记录 发布:2025-02-05 12:39:31 浏览:775
编程奖金计算 发布:2025-02-05 12:27:01 浏览:185
软件怎么去掉付费配置 发布:2025-02-05 12:26:17 浏览:504
安卓手机怎么下载谷歌商店apk 发布:2025-02-05 12:21:09 浏览:367
腾讯视频的缓存在哪里 发布:2025-02-05 12:21:03 浏览:710
安卓聊天记录未备份怎么恢复 发布:2025-02-05 12:05:02 浏览:953
海外搭建服务器可以连外网吗 发布:2025-02-05 11:49:21 浏览:64