【发布时间】:2018-09-21 15:56:37
【问题描述】:
我正在学习 PHP,所以我尝试做一些练习。现在我想将一个 JSON 格式的数组上传到我的脚本中,并将这个数组插入到查询中。为了测试它,我在数组中使用了三个固定值。我遇到的问题是只返回数组第一个元素的结果,而不是全部三个。 我考虑过错误地获取多个值,但是通过提供多个结果的修复条件,它确实可以正常工作。我还认为数组可能传递错误,但是当我从脚本中打印它时,我得到它完全像这样返回:
(
[0] => 141
[1] => 145
[2] => 54
)
有人知道哪里错了吗?
我的脚本:
<?php
include 'DBConfig.php';
$conn = new mysqli($servername, $username, $password, $dbname);
if(isset($_POST['arrayList'])){
$JSON_Received = $_POST['arrayList'];
$obj = json_decode($JSON_Received, true);
$matches = implode(',', $obj);
$query = "SELECT * FROM TestTable WHERE id IN ('$matches')";
$result = mysqli_query($conn, $query);
while($row = mysqli_fetch_assoc($result)) {
$array[] = $row;
}
}
header('Content-Type:Application/json');
echo json_encode($array);
mysqli_close($conn);
?>
【问题讨论】:
-
我将它读回到我的应用程序中,我的 logcat 只返回
D/TAG: Response: [{"id":"145","name":"x"}]。看起来差不多就是这样,但我不知道为什么 -
你的 HTML 是什么样的,你在表单中输入了什么值?
-
你可以做
$query = "SELECT * FROM TestTable WHERE id IN (".implode(',', $obj).")";来避免一行,如果$obj看起来像这样的数组$obj = array(0=> your_id, 1=> your_id, ...); -
@MickaelLeger 出于某种原因,它让我遵循了建议并将
implode()直接包含在查询中!你知道为什么会导致这样的问题吗? -
您的 id 是 INT var,因此当您执行
...id IN ('$matches')时,您将看到类似于'141, 145, 54'(一个字符串)而不是141, 145, 54(一个 INT 列表)的内容。您可以尝试写...id IN ($matches)来检查它是否也有效:)