Eu tenho que admitir,
mysqli_query()
entrada manual não contém um exemplo claro de como buscar várias linhas. Pode ser porque a rotina é tão rotineira, conhecida pelo pessoal do PHP há décadas:$result = $link->query("DESCRIBE students");
while ($row = $result->fetch_assoc()) {
// to print all columns automatically:
foreach ($row as $value) {
echo "<td>$value</td>";
// OR to print each column separately:
echo "<td>",$row['Field'],"</td><td>",$row['Type'],"</td>\n";
}
}
Caso você queira imprimir os títulos das colunas, primeiro selecione seus dados em um array aninhado e depois use as teclas da primeira linha:
// getting all the rows from the query
// note that handy feature of OOP syntax
$data = $link->query("DESC students")->fetch_all(MYSQLI_ASSOC);
// getting keys from the first row
$header = array_keys(reset($data));
// printing them
foreach ($header as $value) {
echo "<td>$value</td>";
}
// finally printing the data
foreach ($data as $row) {
foreach ($row as $value) {
echo "<td>$value</td>";
}
}
Alguns hosts podem não ter suporte para
fetch_all()
função. Nesse caso, preencha o campo $data
array da maneira usual:$data = [];
$result = $link->query("DESC students");
while ($row = $result->fetch_assoc())
{
$data[] = $row;
}
Duas notas importantes que devo acrescentar.
-
Você precisa configurar o mysqli para lançar erros automaticamente em vez de verificá-los para cada instrução mysqli manualmente. Para fazer isso, adicione esta linha antesmysqli_connect()
:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
-
A observação mais importante: ao contrário demysql_query()
,mysqli_query()
tem um uso muito limitado. Você pode usar esta função apenas se nenhuma variável for usada na consulta. Se alguma variável PHP for usada, você nunca deve usarmysqli_query()
, mas sempre siga as declarações preparadas , assim:
$stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?"); $stmt->bind_param('i', $class); $stmt->execute(); $data = $stmt->get_result()->fetch_all();
É um pouco prolixo, tenho que admitir. Para reduzir a quantidade de código, você pode usar o PDO ou adotar uma função auxiliar simples para fazer todo o negócio de preparação/vinculação/execução dentro:
$sql = "SELECT * FROM students WHERE class=?";
$data = prepared_select($mysqli, $sql, [$class])->fetch_all();