Lumore
@Lumore
Front-end developer

Правильно ли я делаю запрос SQL с помощью mysqli ?

$mysqli = new mysqli('localhost', 'root', '', 'system');

function get_posts() {
	global $mysqli;
	$sql = "SELECT * FROM posts";
	$result = $mysqli->query($sql);
	$result = mysqli_fetch_assoc($result);
	return $result;
}

Потом вывожу:
$posts = get_posts();
foreach($posts as $post) {
	echo '
	<div class="post">
		<div class="post-author"><a href="/profile.php?id='.$post['author-id'].'">'.$post['author-name'].' '.$post['author-surname'].'</a></div>
	</div>
	';
}

В итоге выводятся символы:
1 1
1 1
� �
� �
0 0

У меня был такой вопрос, думал дело в кодировке, но с ней все в порядке.
  • Вопрос задан
  • 2232 просмотра
Решения вопроса 1
@tushev
Так mysqli_fetch_assoc() извлекает только один ряд, а не всю выборку! Если хотите получить всю выборку - надо крутить вызов mysqli_fetch_assoc в цикле. Типа того
while ($row = $result->fetch_assoc()) {
   ....
}
А вы извлекаете один ряд, а потом пытаетесь крутить по нему цикл, думая что крутите его по записям, а на самом деле, цикл у вас крутиться по полям одной первой записи.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Попробуй сразу после коннекта сделать $mysqli->set_charset('ваша кодировка');

Есть вариант, что не указываешь кодировку в HTTP заголовке Content-Type
Ответ написан
FanatPHP
@FanatPHP
Помогаю и новичкам, и старичкам
Неправильно.
Правильно будет так:
1. пишем в адресной строке браузера mysqli_fetch_assoc
2. В открывшемся окне переходим по первой ссылке
3. Внимательно читаем.
4. Думаем.
5. Смотрим примеры.
6. Пишем правильный код.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы