mysqli_result::fetch_array

mysqli_fetch_array

(PHP 5, PHP 7, PHP 8)

mysqli_result::fetch_array -- mysqli_fetch_arrayRecebe a próxima linha de resultado como array associativo, numérico, ou ambos

Descrição

Estilo orientado a objetos

public mysqli_result::fetch_array(int $mode = MYSQLI_BOTH): array|null|false

Estilo procedural

mysqli_fetch_array(mysqli_result $result, int $mode = MYSQLI_BOTH): array|null|false

Recebe uma linha de dados do conjunto de resultados e retorna-a como um array. Cada chamada subsequente a esta função retornará a linha seguinte dentro do conjunto de resultados, ou null se não houver mais linhas.

Além de armazenar os dados nos índices numéricos do array resultante, esta função também pode armazenar os dados em índices associativos usando os nomes dos campos do conjunto de resultados como chaves.

Se duas ou mais colunas do resultado tiverem o mesmo nome, a última coluna terá precedência e irá sobrescrever os dados anteriores. Para acessar múltiplas colunas com o mesmo nome, deve ser usada a versão da linha indexada numericamente.

Nota: Os nomes de campos retornados por esta função diferenciam maiúsculas e minúsculas.

Nota: Esta função define campos NULL como o valor null do PHP.

Parâmetros

result

Somente no estilo procedural: Um objeto mysqli_result retornado por mysqli_query(), mysqli_store_result(), mysqli_use_result() ou mysqli_stmt_get_result().

mode

O segundo arqumento é uma constante que indica qual tipo de array deve ser produzido a partir dos dados da linha atual. Os valores possíveis para este parâmetro são as constantes MYSQLI_ASSOC, MYSQLI_NUM ou MYSQLI_BOTH.

Ao usar a constante MYSQLI_ASSOC, esta função irá se comportar de modo idêntico à função mysqli_fetch_assoc(), enquanyo MYSQLI_NUM irá se comportar de modo idêntico à função mysqli_fetch_row(). A opção final MYSQLI_BOTH irá criar um único array com os atributos de ambas.

Valor Retornado

Retorna um array que representa a linha recebida, null se não houver mais linhas no resultado, ou false em caso de falha.

Exemplos

Exemplo #1 Exemplo de mysqli_result::fetch_array()

Estilo orientado a objetos

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$query = "SELECT Name, CountryCode FROM City ORDER BY ID LIMIT 3";
$result = $mysqli->query($query);

/* array com índice numérico */
$row = $result->fetch_array(MYSQLI_NUM);
printf("%s (%s)\n", $row[0], $row[1]);

/* array associativo */
$row = $result->fetch_array(MYSQLI_ASSOC);
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);

/* array com índice numérico e associativo */
$row = $result->fetch_array(MYSQLI_BOTH);
printf("%s (%s)\n", $row[0], $row["CountryCode"]);

Estilo procedural

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
$result = mysqli_query($mysqli, $query);

/* array com índice numérico */
$row = mysqli_fetch_array($result, MYSQLI_NUM);
printf("%s (%s)\n", $row[0], $row[1]);

/* array associativo */
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);

/* array com índice numérico e associativo */
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
printf("%s (%s)\n", $row[0], $row["CountryCode"]);

Os exemplos acima produzirão algo semelhante a:

Kabul (AFG)
Qandahar (AFG)
Herat (AFG)

Veja Também

add a note add a note

User Contributed Notes 4 notes

up
82
Jammerx2
14 years ago
Putting multiple rows into an array:

<?php
$mysqli
= new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
   
printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";
$result = $mysqli->query($query);

while(
$row = $result->fetch_array())
{
$rows[] = $row;
}

foreach(
$rows as $row)
{
echo
$row['CountryCode'];
}

/* free result set */
$result->close();

/* close connection */
$mysqli->close();
?>
up
-2
Duncan
11 years ago
Note that the array returned contains only strings.

E.g. when a MySQL field is an INT you may expect the field to be returned as an integer, however all fields are simply returned as strings.

What this means: use double-equals not triple equals when comparing numbers.

<?php
print $array_from_mysqli_fetch_array['id'] == 1 ? "true" : "false"; // true
print $array_from_mysqli_fetch_array['id'] === 1 ? "true" : "false"; // false
?>
up
-18
meaje at msn dot com
6 years ago
Please note that under PHP 5.x there appears to be a globally defined variable MYSQL_ASSOC, MYSQL_NUM, or MYSQL_BOTH which is the equivalent of MYSQLI_ASSOC, MYSQLI_NUM, or MYSQLI_BOTH!!! Yet under PHP 7.x this is NOT the case and will cause a failure in trying to retrieve the result set!

This can cause severe headaches when trying to find out why you are getting the error:
- mysqli_result::fetch_array() expects parameter 1 to be integer, string given in 'Filename' on line 'XX'
up
-53
ahouston at gmail dot com
13 years ago
Here is a function to return an associative array with multiple columns as keys to the array.

This is a rough approximation of the perl DBI->fetchall_hashref function - something I find myself using quite a bit.

Given a simple mySQL table:

mysql> select * from city;
+----------------+----------------+------------------+------------+
| country        | region         | city             | hemisphere |
+----------------+----------------+------------------+------------+
| South Africa   | KwaZulu-Natal  | Durban           | South      |
| South Africa   | Gauteng        | Johannesburg     | South      |
| South Africa   | Gauteng        | Tshwane          | South      |
| South Africa   | KwaZulu-Natal  | Pietermaritzburg | South      |
| United Kingdom | Greater London | City of London   | North      |
| United Kingdom | Greater London | Wimbledon        | North      |
| United Kingdom | Lancashire     | Liverpool        | North      |
| United Kingdom | Lancashire     | Manchester       | North      |
+----------------+----------------+------------------+------------+

*Note* - this is a simple function that makes no attempt to keep multiple values per key, so you need to specify all the unique keys you require.

<?php

        $link
= mysqli_connect("localhost", "username", "password", "test");
       
$result = mysqli_query($link, "select * from city");
       
$results_arr = fetch_all_assoc($result,array('hemisphere','country','region','city'));

function
fetch_all_assoc(& $result,$index_keys) {

 
// Args :    $result = mysqli result variable (passed as reference to allow a free() at the end
  //           $indexkeys = array of columns to index on
  // Returns : associative array indexed by the keys array

 
$assoc = array();             // The array we're going to be returning

 
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {

       
$pointer = & $assoc;            // Start the pointer off at the base of the array

       
for ($i=0; $i<count($index_keys); $i++) {
       
               
$key_name = $index_keys[$i];
                if (!isset(
$row[$key_name])) {
                        print
"Error: Key $key_name is not present in the results output.\n";
                        return(
false);
                }

               
$key_val= isset($row[$key_name]) ? $row[$key_name]  : "";
       
                if (!isset(
$pointer[$key_val])) {              

                       
$pointer[$key_val] = "";                // Start a new node
                       
$pointer = & $pointer[$key_val];                // Move the pointer on to the new node
               
}
                else {
                       
$pointer = & $pointer[$key_val];            // Already exists, move the pointer on to the new node
               
}

        }
// for $i

        // At this point, $pointer should be at the furthest point on the tree of keys
        // Now we can go through all the columns and place their values on the tree
        // For ease of use, include the index keys and their values at this point too

       
foreach ($row as $key => $val) {
                       
$pointer[$key] = $val;
        }

  }
// $row

  /* free result set */
 
$result->close();

  return(
$assoc);              
}

?>
To Top