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页面,现在我想要的是消息
- Emma发送给John => receiver =“John”,sender =“Emma”或
- 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 在while循环中的事务
SQL——注入攻击——mysqli_multi_query()的使用
如果不使用 mysqli_multi_query,SQL 注入将无法工作