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. Пишем правильный код.
Ответ написан
Ваш ответ на вопрос

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

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