• Почему не выводится последний элемент из бд mysql?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос "почему не выводится" здесь неуместен. Здесь скорее подойдёт вопрос "Этот код вообще хоть как-то работает?" Спойлер: нет.

    Этот код неправильный по стольким параметрам, что у меня просто нет слов.
    Он писался явно без малейшего понимания, а просто методом "подставлю какой-то код, авось подойдёт".
    Причём понимания нет ни на каком уровне - ни того как работает БД, ни того как работает РНР, ни того как РНР работает с БД. Ни даже простого житейского здравого смысла. Зачем в message_get() все эти $user_name = mysqli_real_escape_string ($username);?

    Во-первых, с помощью LAST_INSERT_ID получить "последнюю запись" можно только сразу после вставки. А поскольку в "основном коде" получение сообщения явно не выполняется в одной ветке с записью, то LAST_INSERT_ID не сработает. Причём тут даже простой житейской логики нет. Если сначала один пользователь добавил сообщение, а потом второй, то при получении "последнего" как БД узнает, чьё "последнее" сообщение надо показать?
    Чтобы показать последнее сообщение для определённого пользователя, надо, как правильно отметили в комментариях, надо отсортировать таблицу по времени добавления и выбрать только 1 строку с помощью LIMIT.
    Но кроме этого надо указать, для какого пользователя мы получаем это сообщение.

    Во-вторых, функция mysqli_real_escape_string() вызывается неправильно, она будет выдавать ошибку. А по-хорошему вообще нужно использовать не её, а подготовленные выражения.

    В-третьих, 'message' в запросе вернёт слово 'message', а совсем не само сообщение.

    В-четвёртых, view_message хочет показать несколько значений, но в запросе выбирается только это 'message'

    Во-пятых, как правильно написали выше, функция ни сама ничего не возвращает, ни даже не получает запрошенную из БД информацию. Функция должна выглядеть по крайней мере так

    function message_get($user_id) {
        global $db;
        $chat_id = mysqli_real_escape_string($db,$user_id);
        $query = "SELECT message_id, user_id as chat_id,  message as `text` 
            FROM `secret_messages` 
            WHERE user_id='$chat_id' ORDER BY id DESC LIMIT 1";
        $result = mysqli_query($db, $query);
        return $result->fetch_assoc();
    }

    и потом получать при вызове
    $post = message_get($user_id);
    Ответ написан
    Комментировать
  • Какая нужна теоретическая база на собеседовании джуна?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Реальное понимание ООП и паттернов - это не уровень джуна.
    И да - как вы верно заметили - те кто говорят, на самом деле просто заучили пару расхожих заклинаний.
    Как метко сказано в последней книжке Пелевина,
    Маня была счастлива. Вот что значит быть дочкой банкира - папа не объяснял, папа инструктировал, как объяснять другим".

    Вот людей, которые могут объяснить, но сами не понимают, в последнее время как-то очень много появилось.

    В реальности от джуна требуется чисто механическая часть ООП:
    - уметь использовать готовые классы, уверенно обращаться к свойствам и методам
    - знать что делают основные магические методы
    - понимать неймспейсы и автолоад
    - в целом уверенно читать исходный код классов - то есть не пугаться слов implements и use (которое трейты а не неймспейсы)
    - уметь использовать контрол-клик в Шторме
    Ответ написан
    3 комментария