@Galdar
Web, JS, PHP, NGINX, Linux

По какому принципу работает выгрузка значений из БД?

Столкнулся с очень необычной ситуацией, возможно кто-то уже сталкивался с такой проблемой и сможет объяснить почему так происходит.
Делаю запрос к БД:
$query   = mysqli_fetch_assoc(connectTables("SELECT * FROM `"._TABLE_."` WHERE `login` LIKE '".$login."'"));

Поле login (VARCHAR), запрос не выдавая ошибок выводит пустую переменную $query['name'] в консоле выдает как пустоту, через различные проверки выдает null, но отправив её в браузер через AJAX:
$.ajax({
            type: 'POST',
            url: 'script.php',
            success:function(response){
               console.log(response);
            }
        });

Чудесным образом выдает значение.
Я прекрасно понимаю что искать по индексу значение VARCHAR это не очень хорошая идея, это дольше чем использовать просто цифры INT, но такая нужда.
Так вот, я бы не заметил проблемы с пустотой в консоле при выводе, но был крайне удивлен почему так, повторюсь, var_dump print_r пишут NULL, echo просто пустота, пытался использовать encode/decode но по прежнему NULL.
Просьба объяснить почему так, я просто в непонятка капаю в инете пытаясь найти ответ на вопрос!


Хочу подметить что если в запросе установить % ( "SELECT * FROM `"._TABLE_."` WHERE `login` LIKE '%".$login."%'" ) то значение выводится в консоль
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
@Galdar Автор вопроса
Web, JS, PHP, NGINX, Linux
Ninazu,
Ещё одно решение моей проблемы
Значит дело в том что попадает в переменную $login, и что делает функция connectTables
Зуб даю, что если вставить явный запрос, то всё будет как нужно. % - подразумевает что у вас может быть что угодно в условии LIKE. Ставлю на то что логин не находит из-за того что вы его ни обрезали от невидимых символов и пытаетесь найти по точному соответствию


За это отдельное спасибо!

P.S. Кстати переменные можно вставлять внутрь двойных кавычек, не так режет глаз как конкатенация

"`login` LIKE '".$login."'"
так красивей будет
"`login` LIKE '{$login}'"
а еще более правильно использовать плейсхолдеры чтоб избежать SQL иньекции
"`login` = :login"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы