首先我必须告诉你,这是我在 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 几个小时的初学者)
非常感谢!
最佳答案
这里发生了两个不同的问题。一个是彻底导致您所看到的问题,另一个是一个糟糕的实践错误,从长远来看会给您带来麻烦。
第一个问题就是您要问的问题。 mysql_fetch_array 函数(请参阅此处的 Docs)需要您提供至少一个输入(结果输入)。它还具有第二个可选输入。该可选输入默认为 MYSQL_BOTH,它返回一个关联数组,其中包含通过键(列名称)及其索引提供的结果。也就是说,如果您选择“id”列,您就会在 $array[0] 和 $array['id'] 中获得它的值。它是重复的,因此 JSON 过程会继承重复的内容。您需要向该函数提供第二个值,可以是 MYSQL_ASSOC 来获取 $array['id'],也可以是 MYSQL_NUM 来获取 $array[0]。
你的第二个问题是功能的选择。您正在使用“原始”mysql 函数。这些功能已被折旧,这是一个技术术语,意味着“不再支持这些功能,但我们保留了它们,以便您有时间修复遗留代码”。对于遗产,请阅读“旧”。这些函数很快就会消失,您需要升级到更好的选项——mysqli 函数或 PDO 类。我强烈推荐 PDO 类,因为一旦学会它就很容易学,并且具有更便携的优点。无论您使用哪一种设置,您都需要学习使用准备好的语句作为性能和安全问题。目前,您正在使用“原始”语句,这些语句历史上很容易通过所谓的“注入(inject)攻击”进行干扰。您可以看到此类攻击的虚构示例 here ,并且网上有很多关于它的文章。这些攻击可能非常复杂且难以应对,因此强烈建议使用准备好的语句(它会为您处理)。在您在这里使用的具体示例中,您无需担心它,因为您没有包含任何用户输入,但这是一个需要养成的重要习惯。
关于php - SQL 表中的 JSON 得到双结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752791/