0

делал я простенький блог для обучения, и захотелось мне сделать авто довыведение постов через ajax с js частью вроде разобрался а вот с серверной не очень, и так вот код простенького класса для работы с бд (основные функции):

class DataBaseWorker{

    protected $connection;
    public function __construct()
    {
        $this->connection = mysqli_connect("localhost", "root", "", "site84");
    }

    public function __destruct(){
        $this -> connection->close();
    }


    public function getPosts(){
        return mysqli_query($this->connection, "SELECT * FROM `posts`");
    }

    public function getPost($id){
        $id = addslashes($id);
        return mysqli_query($this->connection, "SELECT * FROM `posts` WHERE `ID` = '$id' ");
    }

    public function getPopularPosts(){
        return mysqli_query($this-> connection, "SELECT * FROM `posts` ORDER BY `popularity` DESC LIMIT 4");
    }

    public function updatePosts($maxId){
        return mysqli_query($this->connection, "SELECT * FROM `posts` ORDER BY date DESC LIMIT '$maxId', 4");
    }
}

для ajax'a я использую поледнюю функцию по запросу, я думаю, видно что возвращается 4 поста с id > чем id у самого последнего уже выведенного поста, теперь сам файл обработчик ajax запроса:

<?php
header('Content-Type: application/json');
require_once ('database.php');

$id = $_GET['maxPost'];
$database = new DataBaseWorker();
$rs = $database->updatePosts($id);
$data = [];


while($row = mysqli_fetch_assoc($rs)){
    array_push($data, $row);
}

echo json_encode($data);

в других случаях конструкция с whil'ом не подводила, но тут почему то выходит ошибка:

mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given

раньше такого не было, как я понял в rs приходит bool, но судя по оф. документации при select запросах возвращается mysqli_result, а вот bool только для update, insert и т.п. запросах + если попробовать вывести $rs то выводится undefined, что делать?

P.S. я проверял запрос база данных возвращает как минимум 3 строки, то есть возвращаемый результат не должен быть null и т.п.

P.P.S. версия php 5.6

  • проверьте на ошибки свои запросы. вот например вы зачем в кавычках указываете числовое значение ? limit не допускает кавычек ... И ошибки вы не обрабатываете, поэтому не видите проблемы – Mike Jul 27 '18 at 16:59
  • значение тут не причем например чуть выше в функции getPopularPosts это никак не мешает (это кавычки php, весь запрос у нас в двойных кавычках, а нам нужно подставить значение переменной, что делается только в одинарных, поэтому они там и нужны, (без них в запрос бы просто вставилось вместо цифры имя переменной $maxId ) ) , на ошибки я проверял, все нормально – NEStenerus nester Jul 27 '18 at 17:03
  • 1
    Зачем вы говорите не правду. вот пример https://ideone.com/1lu4iW во первых переменная отлично подставляется без кавычек. во вторых в первом случае (как у вас) в результирующей строке кавычки. А теперь проверьте запрос с кавычками в MySQL он выдаст синтаксическую ошибку – Mike Jul 27 '18 at 17:12
  • @Mike действительно, я пересмотрел запрос и вот что понял: это работает выше т.к. mysql сам понимает что если я сравниваю ID(тип integer) и '1' в запросе то нужно '1' привести к числу, а вот в конструкции с limit видимо не понимает, спасибо – NEStenerus nester Jul 27 '18 at 17:17
  • 1
    Вот никак понять не могу, почему разработчикам лень проверять успешно ли выполнен запрос к БД штатными средствами? А потом тут пишут вопросы из-за неверно написанного запроса. Хотя в сообщении об ошибке эти места прекрасно отлавливаются – ArchDemon Jul 27 '18 at 17:43
  • 1
    @ArchDemon создайте темку с вашим вопросом, мы попробуем вам помочь и ответить на ваш вопрос :> – Manitikyl Jul 27 '18 at 17:51

0 Answers0