你好友好的天才! 我已阅读更大的结果集我在查询时必须使用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));
}
?>
答案 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
从表中重新获取所有行?