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

Не выводит текст, который берётся из БД. Подключение присутствует, ошибок в запросах нет, проверял через 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; ?>
  • Вопрос задан
  • 144 просмотра
Решения вопроса 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().
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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