mysqli_multi_query数组问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysqli_multi_query数组问题相关的知识,希望对你有一定的参考价值。

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

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...|

我有一个带有on的html页面,现在我想要的是消息

  1. Emma发送给John => receiver =“John”,sender =“Emma”或
  2. John发送给Emma => receiver =“Emma”,sender =“John”

在控制台中显示。我可以使用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
",$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。

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

答案

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

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

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

以上是关于mysqli_multi_query数组问题的主要内容,如果未能解决你的问题,请参考以下文章

php 的 mysqli_multi_query 不工作

PHP mysqli_multi_query 在while循环中的事务

SQL——注入攻击——mysqli_multi_query()的使用

如果不使用 mysqli_multi_query,SQL 注入将无法工作

严格标准:mysqli_multi_query 出现 mysqli_next_result() 错误

我收到一个错误“命令不同步;当我使用mysqli_multi_query时,你现在无法运行此命令