SQL Table中的JSON获得双重结果

时间:2013-09-11 23:08:27

标签: php mysql sql json

首先,我必须告诉你,这是我迈向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:值,1:值,2 ...而另一个使用表键,我怎么才能只打印第二个?

顺便说一句,有人可以给我链接,所以我可以知道我必须更换mysql,这是想到过时的? (我是几个小时的初学者使用PHP)

非常感谢!

1 个答案:

答案 0 :(得分: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,网上有很多关于它的文章。这些攻击可能非常复杂且难以对抗,因此强烈建议使用预处理语句(为您处理)。在您在这里使用的具体示例中,您不必担心它,因为您没有包含任何用户输入,但这是一个很重要的习惯。