查询中的数组仅返回第一个值的结果

时间:2018-09-21 15:56:37

标签: php arrays mysqli

我正在学习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);
?>

1 个答案:

答案 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列表)。