mysqli_multi_query数组问题

时间:2017-12-17 00:06:34

标签: php jquery mysqli

有一些奇怪的事情发生了。 我有一个数据库,看起来像这样:

table name: dm
|id|receiver|sender|msg          |
|1 |John    |Emma  |Hey John!    |
|2 |Emma    |John  |Hey!         |
|3 |John    |Emma  |Whats up     |
|4 |Emma    |John  |Not too much |
|5 |John    |Keira |Have you got...|

我有一个带有a的html页面,现在我想要的是

的消息
  1. Emma发送给John => receiver =“John”,sender =“Emma”或
  2. John发送给Emma => receiver =“Emma”,sender =“John”
  3. 将显示在控制台中。 我可以使用console.log()函数使用JQuery做到这一点。

    我的PHP看起来像这样:

    $user1 = "John";
    $user2 = "Emma";
    $sql = "SELECT * FROM dm WHERE receiver = '$user1' AND sender = '$user2';SELECT * FROM dm WHERE receiver = '$user2' AND sender = '$user1'";
    
    // Execute multi query
    if (mysqli_multi_query($link,$sql))
    {
      do
        {
          $i = 0;
          $msg = array();
    
        if ($result=mysqli_store_result($link)) {
    
          while ($row=mysqli_fetch_row($result))
            {
            printf("%s\n",$row[0]);
            $msg[$i] = $row[0];
              $i++;
            }
          mysqli_free_result($result);
          }
        }
      while (mysqli_next_result($link));
    }
    
    echo json_encode($msg);
    exit();
    mysqli_close($link);
    

    你会注意到,我在那里有“printf”,因为我想知道数据库会给我什么。它正确地回复了id:1,3,2,4。

    但是,我通常希望使用JQuery ajax来执行请求。我也知道如何做到这一点。因为我想拥有一个数组,其中包含帖子的所有id,如下所示:

    ["1","2","3","4"]
    

    不幸的是,我在代码中写的回复给我的方式是:

    ["2","4"]
    

    所以发生的事情是他只将第一个查询中的内容放入数组中。

    那究竟是什么问题?

    我想修复数组以保存所有相应消息的id,即1,2,3,4。优选地也按此顺序而不是像这样1,3,2,4。

    我希望我能清楚地解决问题并感谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

您在外部循环中重置$i$msg。这意味着您只能看到数组中第二个查询的结果。将$i = 0;$msg = array();行移到该循环之外。

那就是说,没有理由在这里做2个查询。只需在OR子句中使用WHERE即可同时获得两个结果。这将更快更容易。

此外,这非常重要:您对SQL injection持开放态度。您需要使用预准备语句,而不是将变量连接到查询中。请参阅How can I prevent SQL injection in PHP?