【问题标题】:php and mysql query results displayed only if using limitphp 和 mysql 查询结果仅在使用 limit 时显示
【发布时间】:2015-03-29 03:11:18
【问题描述】:

为了了解更多 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 行。使用 1-11 的 LIMIT 将返回结果,而 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();
?>

提前谢谢你,

背景

【问题讨论】:

  • LIMIT 1-11 是什么意思?您想要所有客户还是第二页?
  • 为了比较: "SELECT * FROM customers" - 没有结果 "SELECT * FROM customers LIMIT #" - 如果 # 为 11 或更少则返回结果 "SELECT * FROM customers LIMIT #" - 如果没有结果# 为 12 或更大
  • 这真的没有任何意义,这不是它应该如何工作的。 LIMIT 10 将返回 0 到 10 个结果,具体取决于数据库中的数据量,它只是限制返回的行。我不知道为什么当您的记录不足时您看不到任何行。您确定此查询独立于 PDO 可以正常工作吗?您的代码中是否存在阻止其正常工作的错误?您需要仔细检查流程的每个步骤之间发生的情况。

标签: php mysql json


【解决方案1】:

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

SELECT * FROM customers LIMIT 11

正常工作,所以会

SELECT * FROM customers LIMIT 12

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

编辑

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

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

通过正确配置您的数据库,SET NAMES 变得过时了。

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

【讨论】:

  • codeprepare($sql); $stmt->执行(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC);回声 json_encode($result);死(); ?>code
  • 代码很简单,我明白了。但是,第 12 条记录包含一个晦涩的字符 (Luleå),并且您没有明确的字符集设置。我猜这是问题所在,这是字符集问题。我将在答案中编辑一些建议。
  • 在 MySql 语句中使用 LIMIT 我一直在逐行浏览数据库并替换特殊字符。到目前为止,这使得返回的数据增长到 22 行,验证了 TacoV 的答案。
【解决方案2】:

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

【讨论】:

  • 对不起,@ 打错了。
  • 为了比较: "SELECT * FROM customers" - 没有结果 "SELECT * FROM customers LIMIT #" - 如果 # 为 11 或更少则返回结果 "SELECT * FROM customers LIMIT #" - 如果没有结果# 为 12 或更大
猜你喜欢
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 2011-08-21
  • 2013-01-31
  • 2015-01-01
相关资源
最近更新 更多