我正在学习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);
?>
答案 0 :(得分:2)
当您写WHERE id IN ('$matches')
时,结果将是WHERE id IN ('141, 145, 54')
,因此您的STRING和ID为INTEGER。
尝试替换:
$matches = implode(',', $obj);
$query = "SELECT * FROM TestTable WHERE id IN ('$matches')";
通过
$matches = implode(',', $obj);
$query = "SELECT * FROM TestTable WHERE id IN ($matches)";
或
$query = "SELECT * FROM TestTable WHERE id IN (".implode(',', $obj).")";`
这样,您将获得WHERE id IN (141, 145, 54)
(一个INT列表)。