当数据库关闭时,JSON从PHP API打印两次
我的API从MySQL表中获取一行,将其编码为JSON,并对其进行响应。我使用distinct查询来防止重复,但是JSON将每个值包含两次 我的查询获取如下数据 下面是我得到的JSON: 我的PHP API代码是:当数据库关闭时,JSON从PHP API打印两次,php,json,Php,Json,我的API从MySQL表中获取一行,将其编码为JSON,并对其进行响应。我使用distinct查询来防止重复,但是JSON将每个值包含两次 我的查询获取如下数据 下面是我得到的JSON: 我的PHP API代码是: <?php $servername = "localhost"; $username = "testuser"; $password = "dbpassword"; $dbname = "testDB"; // Create connection $conn = new
<?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();
?>
查看以下文档: 将结果行提取为关联数组、数值数组或两者 和(注意最后一个参数的默认值!): …因此,请为结果类型提供不同的值: 此可选参数是一个常量,指示应从当前行数据生成何种类型的数组。此参数的可能值为常数MYSQLI_ASSOC、MYSQLI_NUM或MYSQLI_两者 问题 问题在于你怎么打电话。默认情况下,如果省略第二个参数,
mysqli\u fetch\u数组
使用mysqli\u两者
类型获取数据(请参阅)。这意味着它同时返回数字键和列名键。因此,如果您的数据如下所示:
BANK
--------
ABC Bank
DEF Bank
array(
0 => "ABC Bank",
"BANK" => "ABC Bank"
)
您将获得每行的数组,如下所示:
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))
或
一些额外的建议
您确实应该添加一些错误检查代码来处理数据库错误。此外,您还将诸如
mysqli\u fetch\u array()
之类的函数代码与诸如$conn->close()之类的面向对象代码混合使用。如果你很小心的话,这会起作用,但这不是一个很好的实践,会导致更多的错误。这也使得测试变得越来越困难。我强烈建议只使用一个或另一个,就我个人而言,我会使用面向对象的代码,可以直接使用。mysqli\u fetch\u array-将结果行作为关联数组、数字数组或两者都使用-不要同时使用这两个数组,您只会得到一个