我的API从MySQL表中获取单行,将其编码为JSON,然后回显它。我使用不同的查询来防止重复,但JSON包括每个值两次。
我的查询提取此类数据
这是我得到的JSON:
我的PHP API代码是:
<?php
$servername = "localhost";
$username = "testuser";
$password = "dbpassword";
$dbname = "testDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error)
{
die("Connection failed: " . $conn->connect_error);
}
$query = "SELECT DISTINCT BANK FROM BANK_MASTER";
$response = array();
$result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_array($result))
{
$response[] = $row;
}
header('Content-Type: application/json');
echo json_encode($response);
$conn->close();
?>
答案 0 :(得分:0)
查看mysqli_fetch_array的文档:
将结果行提取为关联行,数字数组,或两者
和(注意最后一个参数的默认值!):
mixed mysqli_result::fetch_array ([ int $resulttype = MYSQLI_BOTH ] )
...所以为结果类型提供不同的值:
此可选参数是一个常量,指示应从当前行数据生成哪种类型的数组。此参数的可能值是常量MYSQLI_ASSOC,MYSQLI_NUM或MYSQLI_BOTH。
答案 1 :(得分:0)
问题在于你如何致电mysqli_fetch_array()
。默认情况下,如果省略第二个参数,mysqli_fetch_array
将使用MYSQLI_BOTH
类型提取数据(请参阅the docs)。这意味着它返回数字和列名称键。所以,如果您的数据是这样的:
BANK
--------
ABC Bank
DEF Bank
您将获得每行的数组,如下所示:
array(
0 => "ABC Bank",
"BANK" => "ABC Bank"
)
这将产生类似
的JSON[
{
"0":"ABC Bank",
"BANK":"ABC Bank"
},
{
"0":"DEF Bank",
"BANK":"DEF Bank"
}
]
使用结果类型MYSQLI_ASSOC
或MYSQLI_NUM
代替
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
或
while ($row = mysqli_fetch_array($result, MYSQLI_NUM))
你真的应该添加一些错误检查代码来处理数据库错误。此外,您正在将功能代码(如mysqli_fetch_array()
)与面向对象的代码(如$conn->close()
)混合使用。如果你小心,这将有效,但这不是一个很好的做法,并导致更多的错误。它也使测试变得更加困难。我强烈建议只使用其中一个,而且我个人会选择面向对象的代码,这是非常好的。