【问题标题】:JSON from SQL Table get double result来自 SQL 表的 JSON 得到双重结果
【发布时间】:2013-09-11 23:08:27
【问题描述】:

首先我要告诉你,这是我在 php 和 JSON 上的第一步。

我决定使用 JSON 从客户 SQL 表中获取价值。

我使用这个脚本得到我的结果:

mysql_connect($config['mysql_host'],$config['mysql_user'],$config['mysql_pass']);
//select database
@mysql_select_db($config['db_name']) or die( "Unable to select database");


mysql_query('SET CHARACTER SET utf8');

$fet=mysql_query('select * from  vehicule');

$json = array();

while($r=mysql_fetch_array($fet)){
    $json[] = $r;
}

header('Content-Type: application/json');


echo $json_data=json_encode($json);

一切都很好,除了我的 JSON 结果看起来像:

        0 = 462;
        1 = "Hyundai ix20 crdi 115 panoramic sunsation";
        10 = 1346450400;
        11 = "462-Hyundai-ix20-crdi-115-panoramic-sunsation";
        12 = 462;
...

       id = 462;
        kilometrage = 14400;
        marque = 4;
        modele = 137;
        motorisation = 2;
        ordre = 462;
        prix = 17500;
        puissance = 6;
        titre = "Hyundai ix20 crdi 115 panoramic sunsation";
        url = "462-Hyundai-ix20-crdi-115-panoramic-sunsation";

...

我有 2 个版本的表格结果:一个带有 0:value、1:value、2...,另一个使用 table 键,我怎样才能只打印第二个?

顺便说一句,有人可以给我链接,这样我就可以知道我必须用什么来替换认为过时的 mysql ? (我是使用 PHP 几个小时的初学者)

非常感谢!

【问题讨论】:

  • 你的输出看起来不像 JSON,从我坐的地方......但你应该能够只编码一个特定的行(即:json_encode($json[0])),或者添加一个WHERE 子句到您的数据库查询,以便它只返回您真正想要的行。

标签: php mysql sql json


【解决方案1】:

这里发生了两个不同的问题。一个是直接导致您看到的问题,另一个是错误的实践错误,从长远来看会让您面临麻烦。

第一个问题是您要询问的问题。 mysql_fetch_array 函数(请参阅此处的Docs)需要您提供的至少一个输入(结果输入)。它还有第二个可选输入。该可选输入默认为 MYSQL_BOTH,它返回一个关联数组,其结果可通过键(列名)及其索引获得。也就是说,如果您选择列 'id',您将在 $array[0] 和 $array['id'] 中获得它的值。它是重复的,因此 JSON 过程会继承重复。您需要为函数提供第二个值,MYSQL_ASSOC 以获取 $array['id'] 或 MYSQL_NUM 以获取 $array[0]。

您的第二个问题是函数的选择。您正在使用“原始”mysql 函数。这些已被贬值,这是一个技术术语,意思是“不再支持这些功能,但我们已将它们保留下来,以便您有时间修复遗留代码”。对于遗产,请阅读“旧”。这些函数很快就会消失,您需要升级到更好的选择——mysqli 函数或 PDO 类。我强烈推荐 PDO 课程,因为一旦你学会了它,它就很容易学习并且具有更便携的优势。无论您使用哪种设置,您都需要学习使用准备好的语句作为性能和安全问题。目前,您正在使用“原始”语句,这些语句很容易通过所谓的“注入攻击”进行干扰。你可以看到这种攻击的虚构例子here,网上有很多关于它的文章。这些攻击可能非常复杂且难以对抗,因此强烈建议使用准备好的语句(为您处理它)。在您在这里使用的具体示例中,您无需担心它,因为您没有包含任何用户输入,但这是一个重要的习惯。

【讨论】:

  • 哼哼,我一个字都听不懂。不过非常感谢
  • @user2770626 如果您对我所说的内容一个字都听不懂,除非您花时间学习,否则您会遇到很多麻烦。我将尝试编辑我的答案以澄清,但如果您想编写体面的程序,则需要了解这些概念。
  • 这就是为什么我说我在 php 上花了 3 个小时,完全是初学者。
  • 好的,我有,MYSQL_NUM 作为第二个参数,这很酷,但是如何使用 mySqli 和我们的 PDO 驱动程序?
  • PHP 常见问题解答中有一个quick explanation:PHP 有三个用于 MySQL 的主要库,而您正在使用的那个正在被逐步淘汰,因为它很受欢迎但以安全漏洞而闻名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2012-10-11
相关资源
最近更新 更多