我正在建立一个简单的私人消息系统。 我尝试将所有会话都显示在用户的收件箱中,我使用foreach循环。但是,循环似乎没有打印出任何东西。它只给出错误:警告:非法字符串偏移。
以下是代码的示例(在我的原始代码中,我通过查询从数据库中获取这些值)
$result = array();
$result['conversation_id'] = '3';
$result['conversation_subject'] = 'test112';
$result['conversation_last_reply'] = '1485701808';
print_r($result);
foreach($result as $conversation){
echo $conversation['conversation_subject'];
}
当我使用print_r时,打印正确的结果(3,test112和1485701808)但是在foreach循环中我一直收到警告。 任何人都可以帮我解决这个问题吗? 谢谢!
编辑:相关的PHP代码
$sql = $db->prepare("SELECT
conversations.conversation_id,
conversations.conversation_subject,
MAX(conversations_messages.message_date) AS conversation_last_reply
FROM conversations
LEFT JOIN conversations_messages ON conversations.conversation_id = conversations_messages.conversation_id
INNER JOIN conversations_members ON conversations.conversation_id = conversations_members.conversation_id
WHERE conversations_members.user_id = {$_SESSION['user_id']}
AND conversations_members.conversation_deleted = 0
GROUP BY conversations.conversation_id
ORDER BY conversation_last_reply DESC");
$sql->execute();
$result = $sql->fetch(PDO::FETCH_ASSOC);
foreach($result as $conversation){
?>
<div class="conversations">
<h4><a href=""><?php echo $conversation['conversation_subject']; ?> </a></h4>
<p>Last reply: </p>
</div>
<?php
}
编辑:当我尝试回复“conversation_last_reply”时,我也收到2条警告: date()期望参数2为整数,在AND Warning中给出的字符串:非法字符串偏移量。
这是我试图回应日期:
echo date('d/m/Y H:i:s', $conversation['conversation_last_reply']);
答案 0 :(得分:0)
来自OP's comment,
我想要一个所有会话的列表,所以我需要一个foreach循环。当只有一次谈话时无关紧要。但是,如果用户有多个会话,我想循环使用这些会话,请为所有会话创建一个会话,并将会话主题设为
<h2>
使用while()
循环代替foreach
循环来循环遍历结果集中的所有会话。
// your code
$sql->execute();
while($conversation = $sql->fetch(PDO::FETCH_ASSOC)){
?>
<div class="conversations">
<h2><a href=""><?php echo $conversation['conversation_subject']; ?> </a></h2>
<p>Last reply: </p>
</div>
<?php
}