PHP 和 MySQL 查询结果仅在使用 limit 时显示


php and mysql query results displayed only if using limit

为了学习更多的php,mysql和json,我从 http://www.mysqltutorial.org/wp-content/uploads/downloads/2013/05/mysqlsampledatabase1.zip 下载了一个演示数据库。

我想显示所有客户,以带有编辑和删除按钮的 html 表格格式回显他们。

我的 SQL 语句是

"SELECT * FROM customers" 

它不返回任何结果,也不返回任何错误。但是,如果我将 SQL 语句更改为

"SELECT * FROM customers LIMIT 11" 

返回 122 行中的前 11 行。使用 LIMIT 1-11 将返回结果,而任何 12 或更多将返回注释。

谁能为我阐明这一点?

更新:帮助代码。

<?php
	$servername = "localhost";
	$username = "root";
	$password = "root";
	$dbname = "classicmodels";
	$dbh = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password) or die(mysql_error());
	$sql = 'SELECT * FROM customers LIMIT 12' or die(mysql_error());
	$stmt = $dbh->prepare($sql);
	$stmt->execute();
	$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
	echo json_encode($result);
    die();
?>

提前谢谢你,

贝格

问题不在于您的 SQL 代码。如果

SELECT * FROM customers LIMIT 11

工作正常,所以会

SELECT * FROM customers LIMIT 12

因此,您的 php 代码中可能存在错误。它要么无法正确处理检索到的第 12 条记录,要么由于其他原因无法处理 12+ 限制。你能用相关的 php 代码来扩展这个问题吗?

编辑

要正确显示特殊字符,例如吕勒奥(第 12 条记录)中的 å,您必须匹配数据库设置、数据库连接和输出中的字符集。

例如,如果数据库排序规则为 UTF-8,请在脚本中将第一个查询设为 SET NAMES 'utf8' 。然后,在打印 json 之前,向浏览器发送一个标头(我假设您要输出到浏览器):header('Content-Type: text/json; charset=utf-8');

通过正确配置数据库,SET NAMES 将过时。

我找到的一些有用的指南更详细地解释了这一点:

  • 在 my.cnf 中将 MySQL 默认字符集更改为 UTF-8?
  • https://www.bluebox.net/insight/blog-article/getting-out-of-mysql-character-set-hell

由于您要从表中选择所有内容,因此可能需要将语法更改为:
从客户中选择 *(而不是 @)
限制 x
其中 x 是你的数字,这应该允许超过 12 的数字。