omo carregar o conjunto de resultados MySQLi em um array bidimensiona

Eu tenho um problema com o conjunto de resultados do mysqli. Eu tenho uma tabela que contém um monte de mensagens. Cada linha da tabela representa uma mensagem. Eu tenho algumas colunas como ID, título, corpo e 'público'. A coluna pública contém booleanos, que especificam se a mensagem deve ser exibida para todos ou apenas para a pessoa que a postou. Eu tenho uma página na qual desejo exibir todas as mensagens públicas e, se você clicar em uma mensagem, receberá uma página com a mensagem única e algumas opções extras. Para fazer isso, quero carregar o resultado de uma consulta mysqli em um array bidimensional. Isso significaria uma matriz de mensagens, e cada mensagem é uma matriz em si com o ID, título, corpo etc. como coluna

Então comecei com o código a seguir. A variável '$ link' contém a conexão mysqli (o que funciona bem).

$result = $link->query("SELECT * FROM messages WHERE public = '1'");
$array = $result->fetch_assoc();

print_r($array);

Isso resulta apenas em uma matriz unidimensional, com a última mensagem. Então, tentei o seguinte loop while:

$result = $link->query("SELECT * FROM messages WHERE public = '1'");

while($message = $result->fetch_assoc()){
 $title = $message['title'];
 $body = $message['body'];
 # etc... 
}

Isso funciona da seguinte maneira: exibe todas as mensagens, mas não as coloca em uma matriz (o que eu quero para executar tarefas baseadas em ID e a posição da matriz de mensagens na matriz que contém). Alguém sabe como converter esse tipo de consulta resulta em uma boa matriz bidimensional? Ou uma maneira totalmente diferente e bacana de fazer isso? Desde já, obrigado

PS. Desculpe pelo meu inglês, eu não sou um falante nativo.

questionAnswers(3)

yourAnswerToTheQuestion