В течение последних двух дней я преобразовывал свои функции в mysqli. Я столкнулся с проблемой. У меня есть функция, которая возвращает массив, содержащий строку из базы данных. Однако я хочу, чтобы массив содержал несколько строк по сравнению с одним. Кроме того, как мне удастся выделить отдельные сообщения. Вот моя неудачная попытка, которая отображает только одну строку в массиве.
$mysqli = new mysqli("localhost", "user", "password", "database"); function display_posts ($mysqli, $user_id) { $fields = "`primary_id`, `poster_id`, `profile_user_id`, `post`"; $user_id = (int)$user_id; $query = "SELECT DISTINCT $fields FROM `posts` WHERE `profile_user_id` = $user_id LIMIT 4"; if ($result = $mysqli->query($query)) { $row = $result->fetch_assoc(); return $row; $result->free(); $stmt->close(); }}
Здесь я пытаюсь отобразить данные.
$user_id = 1; $posts = display_posts($mysqli, $user_id); //Not sure what to do with $posts. A While loop perhaps to display each post?
Вы должны использовать цикл, чтобы получить их все сразу:
<?php function resultToArray($result) { $rows = array(); while($row = $result->fetch_assoc()) { $rows[] = $row; } return $rows; } // Usage $query = 'SELECT DISTINCT $fields FROM `posts` WHERE `profile_user_id` = $user_id LIMIT 4'; $result = $mysqli->query($query); $rows = resultToArray($result); var_dump($rows); // Array of rows $result->free();
Почему бы не использовать прямо так:
$result = mysqli_fetch_all($mysqli->query($query), MYSQLI_ASSOC);
Я опаздываю, но я считаю, что это то, чего вы хотели достичь:
$mysqli = new mysqli("localhost", "user", "password", "database"); $fields = "`primary_id`, `poster_id`, `profile_user_id`, `post`"; function display_posts () { global $mysqli; global $fields; $query = "SELECT DISTINCT $fields FROM `posts` WHERE `profile_user_id` = $user_id LIMIT 4"; $posts = $mysqli -> query($query) or die('Error: '.$mysqli -> error); if ($posts -> num_rows > 0) { while ($row = $posts -> fetch_assoc()) { $value = $row['/*The table column here (You can repeat this line with a different variable eg $value 2, $value 3 etc and matching them with the respective table column)*/']; echo $value./*Concatenate the other variables ($value 1 etc) here*/'<br />'; } }else { echo 'No records found.'; } } //Call the function display_posts ();