PHP MySQL Select 长度错误
PHP MySQL Select Length Error
一个 MySQL 数据库包含 11,000 多行和 3 个分配的列:价格、UPC 代码和描述。 运行 LAMP 在同一台机器上 (Ubuntu 18.04),我正在使用 PHP 在页面加载时获取数据库的每一列并将其回显到 javascript然后由用户在文本框中搜索的数组。唯一的问题是我的查询只允许我 select 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";
?>
Returns(来自 Chrome 控制台):
pds_descs = ["desc1","desc2","etc..."];
pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
当限制设置为 645(或删除)时,数组变为:
pds_descs = ; <--What triggers the error in the console
pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
它变得更有趣 因为 "Description" 列是唯一没有收到任何东西的列,我尝试用数字而不是名称来引用该列,替换
$pds_desc[] = $row['Description'];
和
$pds_desc[] = $row[0];
*0 是 "Description" 的正确行。不是抛出相同的输出,而是填充一个用空值填充的小(20-30 行)数组:
pds_descs = [null,null,null,...];
pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
如何修复以将完整的 11,000+ 数据库加载到其在 js 中的数组中以消除 644 限制?我读到过有关使用 Ajax 搜索客户端--> 服务器而不是在加载时将数据库旁加载到客户端的信息,但我从未使用过它,感觉这仍然是一个值得探索的途径。我还阅读了有关将内存增加到 MySQL/PHP 但经过大量努力并修改 php.ini 和 my.cnf 仍然没有任何反应。
错误是条目 645 包含破坏 json_encode() 的非 ASCII 字母;陈述。
为了解决这个问题,我 运行 在 MYSQL:
中查询
SELECT *
FROM sys.pds
WHERE Description <> CONVERT(Description USING ASCII);
这显示了一个不符合 ASCII 的条目列表(我有 8 个条目),我修改了元素普通字母数字字符并应用了这些条目。刷新 chrome 网页后,所有 11,745 行都可以加载!
一个 MySQL 数据库包含 11,000 多行和 3 个分配的列:价格、UPC 代码和描述。 运行 LAMP 在同一台机器上 (Ubuntu 18.04),我正在使用 PHP 在页面加载时获取数据库的每一列并将其回显到 javascript然后由用户在文本框中搜索的数组。唯一的问题是我的查询只允许我 select 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";
?>
Returns(来自 Chrome 控制台):
pds_descs = ["desc1","desc2","etc..."];
pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
当限制设置为 645(或删除)时,数组变为:
pds_descs = ; <--What triggers the error in the console
pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
它变得更有趣 因为 "Description" 列是唯一没有收到任何东西的列,我尝试用数字而不是名称来引用该列,替换
$pds_desc[] = $row['Description'];
和
$pds_desc[] = $row[0];
*0 是 "Description" 的正确行。不是抛出相同的输出,而是填充一个用空值填充的小(20-30 行)数组:
pds_descs = [null,null,null,...];
pds_codes = ["code1","code2","etc..."];
pds_Prices = ["price1","price2","etc..."];
如何修复以将完整的 11,000+ 数据库加载到其在 js 中的数组中以消除 644 限制?我读到过有关使用 Ajax 搜索客户端--> 服务器而不是在加载时将数据库旁加载到客户端的信息,但我从未使用过它,感觉这仍然是一个值得探索的途径。我还阅读了有关将内存增加到 MySQL/PHP 但经过大量努力并修改 php.ini 和 my.cnf 仍然没有任何反应。
错误是条目 645 包含破坏 json_encode() 的非 ASCII 字母;陈述。 为了解决这个问题,我 运行 在 MYSQL:
中查询SELECT *
FROM sys.pds
WHERE Description <> CONVERT(Description USING ASCII);
这显示了一个不符合 ASCII 的条目列表(我有 8 个条目),我修改了元素普通字母数字字符并应用了这些条目。刷新 chrome 网页后,所有 11,745 行都可以加载!