Задать вопрос

Почему не выводит текст из бд?

Не выводит текст, который берётся из БД. Подключение присутствует, ошибок в запросах нет, проверял через print_r(), всё заполнено.
Код запроса:
$u_r_name = $db->prepare('SELECT name FROM accounts WHERE mail="'.$_SESSION['mail'].'";');
$u_r_surname = $db->prepare('SELECT surname FROM accounts WHERE mail="'.$_SESSION['mail'].'";');

Код вывода:
<? if(empty($_SESSION['pid'])): ?>
						<div id="auth-block">
							<a href="/login" class="login-btn nav-desktop-menu-header">Войти</a>
							<a href="/registration" class="reg-btn nav-desktop-menu-header">Регистрация</a>
						</div>
					<? else: ?>
						<div id="account-info-block">
							<div class="dash-text" id="account-name"><? echo $u_r_name->execute() . ' ' . $u_r_surname->execute(); ?></div>
							
							<hr class="hr-mini" />
						</div>
					<? endif; ?>
  • Вопрос задан
  • 153 просмотра
Подписаться 1 Простой 10 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 2
FanatPHP
@FanatPHP
Чебуратор тега РНР
Какой ужас...
Или даже так я буду под угрозой sql-инъекций?

prepare само по себе не защищает от инъекций. От того что ты заменил слово query на слово prepare твои запросы защищеннее не станут.
чтобы prepare работало, его надо использовать правильно.

Про остальной код я вообще молчу. С чего ты решил что execute выводит какие-то данные? Зачем делать два запроса чтобы получить одну и ту же запись?

$stmt = $db->prepare('SELECT name, surname FROM accounts WHERE mail=?');
$stmt->execute([$_SESSION['mail']]);
$user = $stmt->fetch();
<div class="dash-text" id="account-name"><?= $user['name'] . ' ' . $user['surname'] ?></div>
Ответ написан
Kulaxyz
@Kulaxyz
Могу лучше
execute возвращает 1 или 0, то есть true или false. Используйте query или лучше fetchAll() после execute и замените в самом sql-запросе данные из сессии на плейсхолдеры во избежание инъекций и уже в execute их вставляйте. Да и вообще, я бы советовал пересмотреть логику, довольно странно, что вы где-то составляете запрос а во вью обращаетесь к БД с помощью execute().
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽