【问题标题】:array in query returns only result of first value查询中的数组仅返回第一个值的结果
【发布时间】: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=&gt; your_id, 1=&gt; your_id, ...);
  • @MickaelLeger 出于某种原因,它让我遵循了建议并将implode() 直接包含在查询中!你知道为什么会导致这样的问题吗?
  • 您的 id 是 INT var,因此当您执行 ...id IN ('$matches') 时,您将看到类似于 '141, 145, 54'(一个字符串)而不是 141, 145, 54(一个 INT 列表)的内容。您可以尝试写...id IN ($matches) 来检查它是否也有效:)

标签: php arrays mysqli


【解决方案1】:

当您编写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列表。

【讨论】:

    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2015-02-09
    相关资源
    最近更新 更多