PHP mysqli查询使用MYSQLI_USE_RESULT

时间:2016-02-28 20:05:19

标签: php mysql mysqli

你好友好的天才!  我已阅读更大的结果集我在查询时必须使用MYSQL_USE_RESULT选项。我这样做。但是,下面的PHP页面是通过ajax访问的,一旦已知的结果数达到~800,我就会得到0结果。在达到此阈值之前,查询执行得非常好。

所有查询在phpmyAdmin中都可以正常工作。

我做错了什么?

<?php

$servername = "localhost";
$username = "user";
$password = "password";
$database = "mydb";

$mypassword = "expectedPassword";

$receivedPassword =$_POST["pwd"];


if ($receivedPassword != $mypassword) {
    print "credential failure";
} else {

// Create connection
    $conn = new mysqli($servername, $username, $password, $database);
    $myquery =$_POST["query"];

// Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } else {

    }
    $res = $conn->query($myquery, MYSQLI_USE_RESULT);
    $rows = array();
    while ($r = mysqli_fetch_assoc($res)) {
        $rows[] = $r;   
    }
    $conn->close();
    print(json_encode($rows));       
}    
?>

4 个答案:

答案 0 :(得分:0)

这与记忆无关。结果是较大的查询结果和失败之间的关系纯粹是统计的。

真正的问题是数据库中存储的数据偶尔会出现特殊字符。出于某种原因(也许有人可以解释)PHP刚停止 - 没有错误,遇到特殊字符时没有任何错误。具有特殊字符的字段具有排序规则:utf8_general_ci。我从未想过这会是一个问题......也许有人也可以解释这个问题。

在查询完全修复我的问题之前添加:mysqli_set_charset($conn,'utf8');

答案 1 :(得分:-1)

编辑php.ini以使您的服务器使用更多内存。将memory_limit =128M更改为您的愿望值或将ini_set('memory_limit', '-1');添加到您的PHP代码中,但这将告诉服务器使用它想要的所有内存。

答案 2 :(得分:-1)

尝试使用它:

<?php

$servername = "localhost";
$username = "user";
$password = "password";
$database = "mydb";

$mypassword = "expectedPassword";

$receivedPassword =$_POST["pwd"];


if ($receivedPassword != $mypassword) {
    print "credential failure";
} else {

// Create connection
    $conn = new mysqli($servername, $username, $password, $database);
    $myquery =$_POST["query"];

// Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } else {
      $res = $conn->query($myquery, MYSQLI_USE_RESULT);
      $rows = array();
      while ($r = mysqli_fetch_assoc($res)) {
        $rows[] = $r;   
      }
      $conn->close();
      print(json_encode($rows));       

    }

}    
?>

在//检查连接时你输了if函数。如果$ conn是错误,则第一个语句是die()。在其他声明中,如果功能相同,你什么都没有。代码的底部部分需要在else语句中工作。

试试吧。

答案 3 :(得分:-1)

尝试替换此

while ($r = mysqli_fetch_assoc($res)) {
    $rows[] = $r;   
}

在此

if ($result = $conn->store_result()) {
    while ($row = $result->fetch_assoc()) {
        $rows[] = $row; 
    }
    $result->free();
}

您使用MYSQL_USE_RESULT从表中重新获取所有行?