ВНИМАНИЕ!: В настоящее время вы широко открыты для SQL инъекций (атак SQLI). Пожалуйста, используйте подготовленные операторы и параметризованные запросы , используя либо mysqli , либо PDO . Ваша база данных подвергается огромному риску! Не доверяйте никакому пользовательскому вводу!
С учетом сказанного, я буду двигаться вперед с этим ответом, используя подготовленные операторы mysqli и параметризованные запросы .
То, что вам обычно нужно в вашем запросе есть оператор LIMIT
. Более подробную информацию об операторе LIMIT
можно найти здесь .
Пример:
SELECT
*
FROM
messages
WHERE
sender = 1 AND receiver = 2
OR ( receiver = 1 AND sender = 2)
LIMIT 10;
DB Fiddle здесь .
В вашей функции AJAX вам необходимо проанализировать значение, которое будет служить вашей переменной в вашем предложении LIMIT
. С каждым щелчком «Загрузить больше» вы увеличиваете это значение на 10.
Вот как может выглядеть ваша PHP страница:
<?php
// Your user variables
$user1 = $_POST['user1'];
$user2 = $_POST['user2'];
// Your amount of messages to be loaded
$loadMessages = $_POST['messageAmount'];
if(empty($loadMessages )) {
$loadMessages = 0;
}
// DB variables
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// Error handling
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
/*
Declare the query.
One thing to note from a select statement,
is that it is generally considered better practice
to list the fields you want to fetch.
Even if it's considered to be all fields.
So I would recommend doing that over "SELECT *".
*/
$sql = "SELECT
*
FROM
messages
WHERE
sender = ?
AND receiver = ?
or (reciever = ? and sender = ?)
LIMIT (10 + ?)
ORDER BY
sendingTime DESC";
/*
Prepare and bind
The variable identifiers are based on assuming the sender and receiver
are int fields. Change the identifier if that's not the case.
Identifiers:
-s string
-i int
-d double
-b BLOB
*/
$stmt = $conn->prepare($sql);
$stmt->bind_param('iiiii', $user1, $user2, $user1, $user2, $loadMessages);
// Execute the query
$stmt->execute();
// Get result of query
$result = $stmt->get_result();
// Close connection
$stmt->close();
$conn->close();
?>
К l oop по вашим результатам:
<?php
// Check if any returned rows?
if($result->num_rows > 0) {
// Loop through the result(s)
while ($data = $result->fetch_assoc()) {
echo $data['field_name'];
}
} else {
// Something here?
}
?>