2016-01-25 09:21:59 q601115211 阅读数 4962
  • php订单设计

    php订单设计课程涵盖表单设计的整个环节,包括前台表单,后台PHP代码实现,数据入库。更重要的是把订单设计周边的内容也考虑进去,像php表单验证,ajax后台数据查询等。是你学习php进阶,项目实操很有价值地参考。学完后有什么建议可以给我留言,QQ/微信 68183131

    10151 人正在学习 去看看 秦子恒

从数据库查询大量数据时会出现内容不够的提示

PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted

 

这个问题在PHP的官方网站上叫缓冲查询和非缓冲查询(Buffered and Unbuffered queries)。PHP的查询缺省模式是缓冲模式。也就是说,查询数据结果会一次全部提取到内存里供PHP程序处理。这样给了PHP程序额外的功能,比如说,计算行数,将指针指向某一行等。更重要的是程序可以对数据集反复进行二次查询和过滤等操作。但这种缓冲查询模式的缺陷就是消耗内存,也就是用空间换速度。

 

相对的,另外一种PHP查询模式是非缓冲查询,数据库服务器会一条一条的返回数据,而不是一次全部返回,这样的结果就是PHP程序消耗较少的内存,但却增加了数据库服务器的压力,因为数据库会一直等待PHP来取数据,一直到数据全部取完。

 

很显然,缓冲查询模式适用于小数据量查询,而非缓冲查询适应于大数据量查询。

 

对于PHP的缓冲模式查询大家都知道,下面列举的例子是如何执行非缓冲查询API。


 非缓冲查询方法一: mysqli

 

<?php
$mysqli  = new mysqli("localhost", "my_user", "my_password", "world");
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT);
if ($uresult) {
   while ($row = $uresult->fetch_assoc()) {
       echo $row['Name'] . PHP_EOL;
   }
}
$uresult->close();
?>

 

 

非缓冲查询方法二: pdo_mysql

<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass');
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$uresult = $pdo->query("SELECT Name FROM City");
if ($uresult) {
   while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) {
       echo $row['Name'] . PHP_EOL;
   }
}
?>

 

//非缓冲查询方法三: mysql

<?php
$conn = mysql_connect("localhost", "my_user", "my_pass");
$db   = mysql_select_db("world");
$uresult = mysql_unbuffered_query("SELECT Name FROM City");
if ($uresult) {
   while ($row = mysql_fetch_assoc($uresult)) {
       echo $row['Name'] . PHP_EOL;
   }
}
?>

 

 

 

 

 

2020-03-25 18:07:46 u014559227 阅读数 32
  • php订单设计

    php订单设计课程涵盖表单设计的整个环节,包括前台表单,后台PHP代码实现,数据入库。更重要的是把订单设计周边的内容也考虑进去,像php表单验证,ajax后台数据查询等。是你学习php进阶,项目实操很有价值地参考。学完后有什么建议可以给我留言,QQ/微信 68183131

    10151 人正在学习 去看看 秦子恒

在日常生活中,我们需要在控制台让php运行某些程序来进行日常的维护消耗。

在某些情况下,工作任务中需要从数据库读出大量的数据来进行后续的处理,那么php来处理这些大量的数据怎么办呢?
php 的运行内存一般设置的是128M,当读出的数据量大小超出128M程序运行就会抛出异常(php 连接mysql并从mysql中读出的数据一般会直接读进内存当中)。想到的解决办法首先是增大php的运行内存,但有些情况下这种方案是治标不治本的方法,那么我们怎么一劳永逸的去解决呢?

将从mysql中读取的数据不读进内存中,放置在mysql的缓冲区中(这样对数据库的压力比较大,因为查询出来的大数据并没有读进php运行内存),php执行后获得一个资源标识符,通过指标的方式去获取其相关的数据。

//PDO 关键设置,如果不设置,php依旧会从pdo一次取出数据到php
$dbh->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
2019-08-09 17:52:36 qq_37688204 阅读数 1015
  • php订单设计

    php订单设计课程涵盖表单设计的整个环节,包括前台表单,后台PHP代码实现,数据入库。更重要的是把订单设计周边的内容也考虑进去,像php表单验证,ajax后台数据查询等。是你学习php进阶,项目实操很有价值地参考。学完后有什么建议可以给我留言,QQ/微信 68183131

    10151 人正在学习 去看看 秦子恒

表结构:

程序代码:

<?php
$servername = "***.***.***.***";
$username = "***";
$password = "***";
$dbname = "******";

$json = '';
$data = array();

class Dustbin 
{
	public $id;
	public $name;
	public $title;
	public $content;
	public $longitude;
	public $latitude;
	public $point;
	public $isOpen;
	public $icon;
	public $ip;
	
	public $full_0;
	public $full_1;
	public $full_2;
	public $full_3;
}
 
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
} 
 
$sql = "SELECT id, baidu_lon,baidu_lat,full_0,full_1,full_2,full_3 FROM lese";
$result = $conn->query($sql);
 
if ($result->num_rows > 0) {
    // 输出数据
	$index=0;
    while($row = $result->fetch_assoc()) {
		$icon1=array("w"=>23,"h"=>25,"l"=>0,"t"=>21,"x"=>9,"lb"=>12);
		$icon2=array("w"=>23,"h"=>25,"l"=>46,"t"=>21,"x"=>9,"lb"=>12);
        $dustbin = new Dustbin();
		$dustbin->id=($index);
		$dustbin->name="dustbin".($index);
		$dustbin->title="dustbin".($index);
		$dustbin->content="notes".($index);
		$dustbin->ip = $row["id"];
		$dustbin->longitude=$row["baidu_lon"];
		$dustbin->latitude=$row["baidu_lat"];
		$dustbin->point="".($row["baidu_lon"])."|".($row["baidu_lat"]);
		$dustbin->isOpen=0;
		$dustbin->full_0 = $row["full_0"];
		$dustbin->full_1 = $row["full_1"];
		$dustbin->full_2 = $row["full_2"];
		$dustbin->full_3 = $row["full_3"];
		$flag = ($dustbin->full_0+$dustbin->full_1+$dustbin->full_2+$dustbin->full_3);
		if ($flag == 0){
			$dustbin->icon=$icon1;
		}
		else{
			$dustbin->icon=$icon2;
		}
		
		array_push($data,$dustbin);
		$index+=1;
    }
	$json = json_encode($data);//把数据转换为JSON数据.
	echo $json;
} else {
    echo $json;
}
$conn->close();
?>

 

返回结果:

2019-05-14 16:05:14 qq_39156770 阅读数 170
  • php订单设计

    php订单设计课程涵盖表单设计的整个环节,包括前台表单,后台PHP代码实现,数据入库。更重要的是把订单设计周边的内容也考虑进去,像php表单验证,ajax后台数据查询等。是你学习php进阶,项目实操很有价值地参考。学完后有什么建议可以给我留言,QQ/微信 68183131

    10151 人正在学习 去看看 秦子恒

数据库查询经常涉及到分页显示。
为了方便,我全部写在了一个文件里,具体实现的时候最好将他们分开。
同时也没有什么样式,就是一个简简单单的实现。
1.page_list.php:

<?php
include "conn.php";
// 设置每页显示条数
$pageSize = 2;
// 查询数据库记录总数
$res = mysqli_query(getConn(), "select count(*) from book");
$count = mysqli_fetch_row($res);
$count = $count[0];
// 设置最大页数
$max_page = ceil($count/$pageSize);
// 初始化页数
$page = isset($_GET['page'])?intval($_GET['page']):1;
$page = $page > $max_page ? $max_page : $page;
$page = $page < 1 ? 1 : $page;
// 每次起始查找位置
$lim = ($page - 1)*$pageSize;
// 每次查询从第$lim条开始,查询$pageSize条
$result_ = mysqli_query(getConn(), "select * from book limit {$lim}, {$pageSize}");
$query_result = array();
$i = 0;
// 将结果存放到$query_result
if (mysqli_num_rows($result_) > 0) {
    while ($row = mysqli_fetch_assoc($result_)) {
        $query_result[$i] = $row;
        $i++;
    }
}
?>

// 页面显示
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图书列表</title>
</head>
<body>
    <a href="select_limit.php?page=1">首页</a>
    <a href="select_limit.php?page=<?php echo ($page - 1) > 0 ? ($page - 1) : 1;?>">上页</a>
    <a href="select_limit.php?page=<?php echo ($page + 1) < $max_page ? ($page + 1 ) : $max_page; ?>">下页</a>
    <a href="select_limit.php?page=<?php echo $max_page ?>">尾页</a>
    <table border = "1">
        <tr><td>bookId</td><td>bookName</td><td>bookPrice</td><td>bookCount</td><td>Operation</td></tr>
        <?php foreach ($query_result as $it) { ?>
            <tr>
                <td><?php echo $it['bookid'];$id = $it['bookid']; ?>
                </td><td><?php echo $it['bookname'] ?></td>
                <td><?php echo $it['bookprice'] ?></td>
                <td><?php echo $it['bookcount'] ?></td>
                <td><a href="selectById.php?id=<?php echo $id;?>" target="select">修改</a>
                    <a href="5_10_deleteData.php?id=<?php echo $id;?>">删除</a></td>
            </tr>
        <?php } ?>
    </table>
</body>
</html>

2.conn.php

<?php
// 连接数据库函数
function getConn(){
    // 数据库MySQLi
    // 创建连接
    $conn = mysqli_connect("localhost", "root", "284513", "bookdb");
    // 检测连接
    if (!$conn) {
        die("连接失败: " . mysqli_connect_error());
    }
    return $conn;
}
?>
没有更多推荐了,返回首页