怎么在php中使用mysql对buffer进行操作

今天就跟大家聊聊有关怎么在php中使用mysql对buffer进行操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

什么叫使用buffer和不使用buffer呢?

怎么在php中使用mysql对buffer进行操作

客户端与mysql服务端进行查询操作,查询操作的时候如果获取的数据量比较大,那个这个查询结果放在哪里呢?

有两个地方可以放:客户端的缓冲区和服务端的缓冲区。

我们这里说的buffer指的是客户端的缓冲区,如果查询结果已经从服务端获取回来了,放置在了客户端的缓冲区,我们就称之为使用buffer。如果还是存放在服务端的缓冲区的话,我们就说没有使用buffer(unbuffer)。

使用buffer和不使用buffer有什么区别?

主要在内存方面,使用buffer会增加客户端的内存压力,当返回的数据结果特别大的时候可能会占用调用客户端(实际就是一个php进程)比较大的进程。不使用buffer自然对服务端(这里说的是提供mysql服务的服务器)压力更大。

具体可以参考:PHP查询MySQL大量数据的内存占用分析

php中三种模式是如何设置是否使用buffer的?

mysql默认的query是使用buffer的,而不使用buffer就需要使用mysql_unbuffer_query

mysqli默认的query是不使用buffer的,要使用buffer就需要设置MYSQLI_STORE_RESULT

pdo默认的quey是不使用buffer的,要使用buffer就需要设置MYSQL_ATTR_USE_BUFFERED_QUERY

大致相关代码如下:

<?php
$dbConfig=array(
'host'=>'10.128.11.101',
'port'=>'3306',
'user'=>'test',
'pass'=>'test',
'db'=>'test',
);
$sql='select*fromso_topic_app';
//---------mysql----------//
$db=mysql_connect($dbConfig['host'],$dbConfig['user'],$dbConfig['pass']);
mysql_select_db($dbConfig['db'],$db);
mysql_set_charset('utf8',$db);
//mysql使用buffer
$res=mysql_query($sql,$db);
$data=array();
while($row=mysql_fetch_row($res)){
$data[]=$row;
}
//mysql不使用buffer
$res=mysql_unbuffered_query($sql,$db);
$data=array();
while($row=mysql_fetch_row($res)){
$data[]=$row;
}
mysql_close($db);
//---------mysqli----------//
$db=mysqli_connect($dbConfig['host'],$dbConfig['user'],$dbConfig['pass'],$dbConfig['db']);
//mysqli不使用buffer
$result=mysqli_query($db,$sql);
$data=array();
while($row=$result->fetch_array()){
$data[]=$row;
}
//mysqli使用buffer
$result=mysqli_query($db,$sql,MYSQLI_STORE_RESULT);
$data=array();
while($row=$result->fetch_array()){
$data[]=$row;
}
mysqli_free_result($result);
mysqli_close($db);
//---------pdo----------//
$dsn="mysql:dbname={$dbConfig['db']};host={$dbConfig['host']}";
$pdo=newPDO($dsn,$dbConfig['user'],$dbConfig['pass']);
//pdo不使用buffer
$stmt=$pdo->prepare($sql);
$stmt->execute();
$data=array();
$data=$stmt->fetchAll();
//pdo使用buffer
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
$stmt=$pdo->prepare($sql);
$stmt->execute();
$data=array();
$data=$stmt->fetchAll();

看完上述内容,你们对怎么在php中使用mysql对buffer进行操作有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注恰卡编程网行业资讯频道,感谢大家的支持。

发布于 2021-04-03 22:30:27
收藏
分享
海报
0 条评论
166
上一篇:使用PHPExcel怎么对Excel进行操作 下一篇:如何正确的使用ComboBox 控件
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码