【发布时间】:2019-01-18 09:33:05
【问题描述】:
一个 MySQL 数据库包含 11,000 多行和 3 个已分配的列:价格、UPC 代码和描述。在同一台机器(Ubuntu 18.04)上运行 LAMP,我使用 PHP 在页面加载时抓取数据库的每一列,并将其回显到 javascript 数组中,然后用户在文本框中搜索这些数组。唯一的问题是我的查询只允许我选择 644 个项目,然后它什么都不加载。这是一个问题,因为没有显示超过 10,356 行。
php文件:
<?php
session_start();
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT * FROM sys.pds limit 644;";
$result = $conn->query($sql);
if (!$result) {
printf("Errormessage: %s\n", mysqli_error($conn));
}
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$pds_code[] = $row["Code"];
$pds_desc[] = $row['Description'];
$pds_prce[] = $row["Price"];
}
}
$sqlDesc = json_encode($pds_desc);
$sqlPrice = json_encode($pds_prce);
$sqlCode = json_encode($pds_code);
echo "pds_descs = ". $sqlDesc . ";\n";
echo "pds_codes = ". $sqlCode . ";\n";
echo "pds_Prices = ". $sqlPrice . ";\n";
?>
返回(来自 Chrome 控制台):
pds_descs = ["desc1","desc2","etc..."];
pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
当限制设置为 645(或删除)时,数组变为:
pds_descs = ; pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
变得更有趣了由于“描述”列是唯一没有收到任何内容的列,因此我尝试通过数字而不是名称来引用该列,替换
$pds_desc[] = $row['Description'];
与
$pds_desc[] = $row[0];
*0 是“描述”的正确行。不是抛出相同的输出,而是填充一个用 null 填充的小(20-30 行)数组:
pds_descs = [null,null,null,...];
pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
如何修复在 js 中将完整的 11,000+ 数据库加载到其数组中以消除 644 限制?我读过关于使用 Ajax 搜索客户端 - > 服务器而不是在加载时将数据库侧加载到客户端,但从未使用过它,并且觉得这仍然是一个探索的途径。我还阅读了有关增加 MySQL/PHP 内存的信息,但经过大量努力并修改了 php.ini 和 my.cnf 仍然没有发生任何事情。
【问题讨论】:
-
json_encode($pds_desc);返回错误。在运行json_encode函数之前尝试检查数组,看看错误在哪里。 -
我猜你的字符无效,比如
$str = "\xF0";json_encode([$str]);会返回false; -
一切都通过
echo print_r($pds_desc);显示,然后是$sqlDesc = json_encode($pds_desc);? -
您有 SELECT * FROM sys.pds limit 644 限制为 644 条记录,除此之外它不会选择任何内容。如果要选择所有记录,请摆脱限制 644。
-
@FelippeDuarte 显示错误打印
session_start(): Cannot send session cache limiter - headers already sent (output started at [] in []) on line []