Как я могу изменить свой код только с var_dump на echo?
Код:
$link = mysqli_connect("$myHost", "$myUser", "$myPass", "$myDB");
// Check connection
if ($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
$username = mysqli_real_escape_string($link, $_SESSION['username']);
var_dump($username);
$sql = "SELECT * FROM exampletable where username = $username";
if ($result = $link->query($sql)) {
while ($row = $result->fetch_row()) {
var_dump($row);
}
}
Потому что, если я var_dump($row);, я всегда получаю это:
'[email protected]' (length=16)
Но я хочу отображать только имя пользователя :) Я новичок в php, извините.
Спасибо
Примечание. Объектно-ориентированный интерфейс mysqli значительно менее подробен, что упрощает чтение и аудит кода, и его нелегко спутать с устаревшим интерфейсом mysql_query. Прежде чем вы слишком увлечетесь процедурным стилем, стоит переключиться на него. Пример: $db = new mysqli(…) и $db->prepare("…"). Процедурный интерфейс является артефактом эпохи PHP 4, когда был представлен API mysqli, и его не следует использовать в новом коде. Вы уже используете частично в объектно-ориентированном стиле. Вы должны полностью и последовательно придерживаться его.
Примечание. Постарайтесь избавиться от привычки загромождать код ненужными вещами, такими как === false. Многие функции предназначены для возврата значений, которые оцениваются как логически истинные или ложные, поэтому они являются избыточными.
print_r ($ имя пользователя);
@tadman off: TC не хочет создавать банковское приложение, это только первые шаги в php. Думаю, сложно начинать с безопасности)
@toor Первый шаг при изучении кодирования запросов к базе данных - это их правильное кодирование. Нет никакой пользы от использования ярлыков: они могут причинить гораздо больше боли и проблем, чем сэкономить во времени. Во многих профессиях безопасность - это первое, чему они учат, и на то есть веские причины. Маленькие, невинные ошибки могут быть дорогие.
print_r($username); совпадает с var_dump, а не echo
@tadman off: Думаю, у TC старый мануал. И через несколько лет ваши предложения, возможно, устареют) Я считаю, что это лучший способ кодировать что-то с ошибками на первых этапах, чем ничего не кодировать, но отлично)
@toor Я не тот, кто делает огромную проблему из этих ошибок, я просто помечаю их и ссылаюсь на ресурсы, которые объясняют, что делать, чтобы их исправить. На раннем этапе чрезвычайно важно усвоить хорошие привычки и понять, как действовать безопасно. Я занимаюсь этим годами, так как PHP-сообщество исторически не уделяло этому достаточно времени. Если вы хотите подойти и предложить совет, это здорово, но если вы говорите, что это не имеет большого значения, вы » повторное продвижение безразличия и невежества.
@ sarahn22 не то же самое, print_r не показывает длину данных. Попробуйте echo $ username ['username'], там [] содержится имя столбца db, или см. Руководство для функции implode
Понятия не имею, как вы, возможно, получаете: '[email protected]' (length=16), когда вы var_dump($row); ... это просто не имеет никакого смысла. Я думаю, вы имеете в виду ... вы видите только ПЕРВЫЙ var_dump($username);, потому что ваш запрос фактически не выполняется, а не следуете за циклом while (на вашем else нет if, чтобы отображать ошибки).
mysqli_connect("$myHost", "$myUser", "$myPass", "$myDB"); Если это все переменные, удалите кавычки. :: mysqli_connect($myHost, $myUser, $myPass, $myDB);





Ваш запрос не выполняется, потому что вы забыли заключить в кавычки $username. Должен быть:
$sql = "SELECT * FROM exampletable where username = '$username'";
Затем в своем цикле вы можете:
while ($row = $result->fetch_assoc($result)) {
echo $row['somecolumnname'];
}
чтобы увидеть содержимое этого столбца в каждой строке, соответствующей имени пользователя.
sarahn22! Я вижу, что вы новый участник, поэтому добро пожаловать в StackOverflow. :)
Согласно функции PHP MySQLi fetch_row()документация, всякий раз, когда вы ее используете, вы получаете массив с каждым столбцом в качестве индекса или null, если строки не были найдены.
В этом случае, учитывая, что столбец вашего имени пользователя будет первым столбцом, вы можете получить его, набрав:
echo $row[0];
Итак, для лучшего понимания представьте себе таблицу базы данных как:
username | first_name | last_name
---------------------------------
user01 | John | Snow
Вот результаты:
echo $row[0]; // Shows "user01";
echo $row[1]; // Shows "John";
echo $row[2]; // Shows "Snow";
Удачи на вашем новом пути в изучении PHP. :)
mysqliвы должны использовать параметризованные запросы иbind_paramдля добавления пользовательских данных в свой запрос. НЕ НАДО используйте для этого экранирование вручную и интерполяцию или конкатенацию строк, потому что вы создадите серьезный Ошибки внедрения SQL. Случайно неэкранированные данные представляют собой серьезный риск. Использование связанных параметров менее подробно, и их легче проверить, чтобы убедиться, что вы все делаете правильно.