Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL查询在资源有限的主机中内存不足_Php_Mysql_Bigdata - Fatal编程技术网

Php MySQL查询在资源有限的主机中内存不足

Php MySQL查询在资源有限的主机中内存不足,php,mysql,bigdata,Php,Mysql,Bigdata,大家好,在任何事情之前,我想设定无法更改的重要事实: 主机无法更改 在php中设置的php_ini最大内存将不起作用 无法编辑php.ini文件 php无法更新 我们有一个类似于restful服务的webapi,通过url,可以以json方式显示用户。但是我们有85k+条记录,当我们试图将它们全部屏蔽时,php崩溃不会发生,当我们只查找一条记录时,我们有两条代码要处理,但没有一条代码能将所有用户都屏蔽掉 版本1 <?php //security variables $variableNam

大家好,在任何事情之前,我想设定无法更改的重要事实:

主机无法更改 在php中设置的php_ini最大内存将不起作用 无法编辑php.ini文件 php无法更新 我们有一个类似于restful服务的webapi,通过url,可以以json方式显示用户。但是我们有85k+条记录,当我们试图将它们全部屏蔽时,php崩溃不会发生,当我们只查找一条记录时,我们有两条代码要处理,但没有一条代码能将所有用户都屏蔽掉

版本1

<?php
//security variables
$variableName = 'name';
$variableValue = 'value';

//system variables

ob_end_flush();
ob_start();
if(isset($_GET[$variableName]) && $_GET[$variableName]== $variableValue){
    $dbVars = array();
    $query = 'SELECT * FROM users_data ';
    foreach ($_GET as $key => $value) {

        if( $key != $variableName && $key != 'sized' && $key != 'devmode'){
            array_push($dbVars, $key."='".$value."'");
        }
    }
    if( count($dbVars) > 0 ){

        $query .= 'WHERE '.implode(' AND ', $dbVars);
    }
    $result = mysql($w['database'], $query);
    $results = array();
    while($row = mysql_fetch_assoc($result)){
        array_push($results, $row);
    }
    echo json_encode($results);
}
?>
使用flush的版本2

<?php
//security variables
$variableName = 'name';
$variableValue = 'value';

//system variables

ob_end_flush();
ob_start();
if(isset($_GET[$variableName]) && $_GET[$variableName]== $variableValue){
    $dbVars = array();
    $query = 'SELECT * FROM users_data ';
    foreach ($_GET as $key => $value) {

        if( $key != $variableName && $key != 'sized' && $key != 'devmode'){
            array_push($dbVars, $key."='".$value."'");
        }
    }
    if( count($dbVars) > 0 ){

        $query .= 'WHERE '.implode(' AND ', $dbVars);
    }
    $result = mysql($w['database'], $query);
    echo "[";
    while($row = mysql_fetch_assoc($result)){
        $results = array(); 
        foreach($row as $key => $value){
            array_push($results, '"'.$key.'":"'.$value.'"');
        }
        echo '{'.implode(',',$results).'}';
        ob_flush();
    }
    echo "]";
}
?>
当我们希望数据库中的所有用户都是85k时,由于内存限制,结果是无
我们如何才能让所有用户都能使用它?

首先,您的代码中充满了SQL注入漏洞。任何人都可以拥有你的数据库。这是你的问题

现在,PHP内存不足的原因是您正在使用缓冲查询

默认情况下,查询使用缓冲模式。这意味着查询结果会立即从MySQL服务器传输到PHP,然后保存在PHP进程的内存中

请阅读我提供的使用mysqli的链接,并使用无缓冲模式将结果集流式传输到客户端

另外,不要将整个结果集放入数组中

而且很明显,

array_push($dbVars, $key."='".$value."'");

如果任何值包含转义符或其他转义符,将生成无效的JSON。

首先,您的代码充满了SQL注入漏洞。任何人都可以拥有你的数据库。这是你的问题

现在,PHP内存不足的原因是您正在使用缓冲查询

默认情况下,查询使用缓冲模式。这意味着查询结果会立即从MySQL服务器传输到PHP,然后保存在PHP进程的内存中

请阅读我提供的使用mysqli的链接,并使用无缓冲模式将结果集流式传输到客户端

另外,不要将整个结果集放入数组中

而且很明显,

array_push($dbVars, $key."='".$value."'");

如果任何值包含a或其他转义符,将生成无效的JSON。

littlebobbytables。。。无论如何,到底是什么错误?这段代码容易受到SQL注入攻击,并且使用了一个过时的数据库库mysql_*可能会受到攻击,因为它已经多年没有更新了,并且在PHP7中被删除。首先将数据库库更改为现代的mysqli,或者更好的是PDO,并学习使用参数化/准备好的查询。也许不要在一个查询中调用所有记录!并使用jQuery/Ajax调用更多查询中有限制的所有记录。@Sebas当我们想得到数据库中的所有用户都是85k时,结果是无,因为内存不足limit@ricardorios我们需要确切的错误信息:-littlebobbytables。。。无论如何,到底是什么错误?这段代码容易受到SQL注入攻击,并且使用了一个过时的数据库库mysql_*可能会受到攻击,因为它已经多年没有更新了,并且在PHP7中被删除。首先将数据库库更改为现代的mysqli,或者更好的是PDO,并学习使用参数化/准备好的查询。也许不要在一个查询中调用所有记录!并使用jQuery/Ajax调用更多查询中有限制的所有记录。@Sebas当我们想得到数据库中的所有用户都是85k时,结果是无,因为内存不足limit@ricardorios我们需要确切的错误消息:-