此查询在phpMyAdmin中产生预期的4行(见下图):
$property_id_text = "property_id";
$list_messages = $mysqli->prepare("SELECT message_text FROM messages WHERE send_from = ? OR send_to = ? GROUP BY ?");
$list_messages->bind_param("sss", $user_id, $user_id, $property_id_text);
$list_messages->execute();
$list_result = $list_messages->get_result();
if ($list_result):
if(mysqli_num_rows($list_result)>0):
while($list_message = $list_result->fetch_assoc()):
$nachrichten_liste = $nachrichten_liste . '<div>' . $list_message['message_text'] . '</div>';
endwhile;
endif;
endif;
如果我在php网站中循环搜索结果,则只能从phpMyAdmin获取结果表的最后一行作为输出。
$nachrichten_liste
您知道为什么$nachrichten_liste
不包含表格中的所有行吗?我希望以上图片中的所有消息都包含在$list_messages = $mysqli->prepare("SELECT message_text FROM messages WHERE send_from = ? OR send_to = ? GROUP BY property_id");
更新
如果我将GROUP BY运算符“ property_id”直接放在准备好的语句中,则它会起作用
D1=CONCATENATE(A1,":",B1,":",C1)
答案 0 :(得分:2)
当您将值"property_id"
绑定为文字而不是列名时,您正在尝试按字面量GROUP BY(无论如何都不能这样做)。这意味着它将按照始终相同的方式进行分组,并且所有行均位于1组中。您必须将变量包括在语句中,例如...
$property_id_text = "property_id";
$list_messages = $mysqli->prepare("SELECT message_text
FROM messages
WHERE send_from = ? OR send_to = ?
GROUP BY $property_id_text");
$list_messages->bind_param("ss", $user_id, $user_id);
除非您知道$property_id_text
不会成为SQL注入的潜在来源,否则不建议这样做。
对于message_text
,您还应该具有某种聚合函数,以便它知道应该是哪一个(即使它们是相同的)。阅读https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html。