Проблема может быть в том, что вы используете небезопасный способ формирования SQL-запроса, который подвержен SQL-инъекциям. Вместо этого, рекомендуется использовать подготовленные выражения (prepared statements), которые предотвращают SQL-инъекции. <br/> <br/> Вот как вы можете изменить ваш код для использования подготовленных выражений: <br/> <br/> <pre><code class="php">$stmt = $pdo->prepare('SELECT * FROM messages WHERE (user1 = :user1 AND user2 = :user2) OR (user2 = :user1 AND user1 = :user2) ORDER BY id');
$stmt->execute(['user1' => $_SESSION['user_name'], 'user2' => $_POST['user2']]);
while($message = $stmt->fetch()){
if($message['user1'] == $_SESSION['user_name']){
echo "<div id='message'>".$_SESSION['user_name'].": ".$message['message']."</div>";
}
if($message['user2'] == $_SESSION['user_name']){
echo "<div id='message'>".$_POST['user2'].": ".$message['message']."</div>";
}
}</code></pre> <br/> <br/> В этом коде мы используем метод prepare для подготовки SQL-запроса, а затем используем метод execute для выполнения запроса с указанием значений для параметров. Это предотвращает SQL-инъекции, так как значения параметров автоматически экранируются. <br/> <br/> Также, убедитесь, что значения $_SESSION['user_name'] и $_POST['user2'] безопасны для использования в SQL-запросе. Если эти значения могут быть введены пользователем, вам следует использовать функции фильтрации ввода, чтобы убедиться, что они безопасны.