PHP не видит запись из таблицы

может кто-то объяснить почему php не видит запись в таблице, запись есть и условиям удовлетворяет, а вот выводится пустой массив, в результате работы данного файла выводится 4[]

<?php
    require_once 'includes/db.inc.php'; //здесь стандартное подключение бд, здесь ошибки нет, так везде работает на 100%
    session_start();
    $sql="SELECT message,add_friends FROM notifications_".$_SESSION['data-user']['id']."
            WHERE _unread=1 AND cancel_add!=1";
    $result=$pdo->query($sql);
    echo $_SESSION['data-user']['id'];
    echo json_encode($result->fetchAll(PDO::FETCH_ASSOC));

Это то что находится в таблице


Ответы (1 шт):

Автор решения: Ипатьев

Эта таблица, начиная от структуры заканчивая самим фактом её существования - это ночной кошмар программиста.

Это не в укор сказано - все мы учимся и поначалу пишем такой же ужас. Это просто для информации, что так делать ни в коем случае нельзя.

  1. Таблица должна быть ОДНА. В ней должно быть поле ид юзера. Я вижу это не единственный пример, там еще светятся похожие таблицы. Правило тут такое: если у тебя в имени поля или таблицы есть номер - это значит, что ты изуродовал свою базу данных.
  2. Зачем в таблице отдельные поля _read и _unread? Что - одно поле со значениями 1 и 0 не справится?
  3. Не надо делать поле NULL по умолчанию, если будет фильтр по его значению. Или, если значение это просто флаг - то проверять на null

В итоге делаем ОДНУ таблицу, убираем бессмысленное поле _read, добавляем поле по которому различаем юзеров

$sql="SELECT uid,message,add_friends FROM notifications 
      WHERE uid=? AND _unread=1 AND cancel_add is null";
$stmt=$pdo->prepare($sql);
$stmt->execute([$_SESSION['data-user']['id']]);
echo json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
→ Ссылка