有一些奇怪的事情发生了。 我有一个数据库,看起来像这样:
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页面,现在我想要的是
的消息将显示在控制台中。 我可以使用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。
我希望我能清楚地解决问题并感谢您的任何建议!
答案 0 :(得分:1)
您在外部循环中重置$i
和$msg
。这意味着您只能看到数组中第二个查询的结果。将$i = 0;
和$msg = array();
行移到该循环之外。
那就是说,没有理由在这里做2个查询。只需在OR
子句中使用WHERE
即可同时获得两个结果。这将更快更容易。
此外,这非常重要:您对SQL injection持开放态度。您需要使用预准备语句,而不是将变量连接到查询中。请参阅How can I prevent SQL injection in PHP?。