I often like to have my results sent elsewhere in the format of an array (although keep in mind that if you just plan on traversing through the array in another part of the script, this extra step is just a waste of time).
This is my one-liner for transforming a mysqli_result set into an array.
<?php
$sql = new MySQLi($host, $username, $password, $database);
$result = $sql->query("SELECT * FROM `$table`;");
for ($set = array (); $row = $result->fetch_assoc(); $set[] = $row);
print_r($set);
?>
Outputs:
Array
(
[0] => Array
(
[id] => 1
[field2] => a
[field3] => b
),
[1] => Array
(
[id] => 2
[field2] => c
[field3] => d
)
)
I use other variations to adapt to the situation, i.e. if I am selecting only one field:
<?php
$sql = new MySQLi($host, $username, $password, $database);
$result = $sql->query("SELECT `field2` FROM `$table`;");
for ($set = array (); $row = $result->fetch_assoc(); $set[] = $row['field2']);
print_r($set);
?>
Outputs:
Array
(
[0] => a
[1] => c
)
Or, to make the array associative with the primary index (code assumes primary index is the first field in the table):
<?php
$sql = new MySQLi($host, $username, $password, $database);
$result = $sql->query("SELECT * FROM `$table`;");
for ($set = array (); $row = $result->fetch_assoc(); $set[array_shift($row)] = $row);
print_r($set);
?>
Outputs:
Array
(
[1] => Array
(
[field2] => a
[field3] => b
),
[2] => Array
(
[field2] => c
[field3] => d
)
)mysqli_result::fetch_assoc
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
mysqli_result::fetch_assoc
Референца за `mysqli-result.fetch-assoc.php` со подобрена типографија и навигација.
mysqli_result::fetch_assoc
mysqli_fetch_assoc
класата mysqli_driver
mysqli_result::fetch_assoc -- mysqli_fetch_assoc — Fetch the next row of a result set as an associative array
= NULL
Напиши целосна ознака на елемент
Процедурален стил
Преземи го следниот ред од множеството резултати како асоцијативно поле null ако нема повеќе редови.
Презема еден ред податоци од множеството резултати и го враќа како објект, каде што секој атрибут го претставува името на колоната од множеството резултати. Секое последователно повикување на оваа функција ќе го врати следниот ред во множеството резултати, или mysqli_fetch_row() Ако две или повеќе колони од резултатот имаат исто име, последната колона ќе има предност и ќе ги презапише сите претходни податоци. За пристап до повеќе колони со исто име,
Забелешка: Имињата на полињата вратени од оваа функција се case-sensitive.
Забелешка: Оваа функција ги поставува NULL полињата на PHP
nullvalue.
Параметри
-
result објектот како свој прв аргумент. mysqli_result Само процедурален стил: А mysqli_query(), mysqli_store_result(), mysqli_use_result() or mysqli_stmt_get_result().
Вратени вредности
Презема еден ред податоци од множеството резултати и го враќа како асоцијативно поле. Секој последователен повик на оваа функција ќе го врати следниот ред во множеството резултати, или null Враќа објект што го претставува преземениот ред, каде што секој атрибут го претставува името на колоната од множеството резултати, false при неуспех.
Примери
Пример #1 Враќа асоцијативно поле што го претставува преземениот ред, каде што секој клуч во полето ја претставува името на една од колоните на множеството резултати, example
Напиши целосна ознака на елемент
<?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 DESC";
$result = $mysqli->query($query);
/* fetch associative array */
while ($row = $result->fetch_assoc()) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}Процедурален стил
<?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 DESC";
$result = mysqli_query($mysqli, $query);
/* fetch associative array */
while ($row = mysqli_fetch_assoc($result)) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}mysqli_result::fetch_object()
Pueblo (USA) Arvada (USA) Cape Coral (USA) Green Bay (USA) Santa Clara (USA)
mysqli_result::fetch_assoc() mysqli_result iterator and Враќа асоцијативно поле што го претставува преземениот ред, каде што секој клуч во полето ја претставува името на една од колоните на множеството резултати, usage
mysqli_result Пример #2 Споредба на foreachможе да се итерира со помош на
<?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 DESC';
// Using iterators
$result = $mysqli->query($query);
foreach ($result as $row) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}
echo "\n==================\n";
// Not using iterators
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}Горниот пример ќе прикаже нешто слично на:
Pueblo (USA) Arvada (USA) Cape Coral (USA) Green Bay (USA) Santa Clara (USA) ================== Pueblo (USA) Arvada (USA) Cape Coral (USA) Green Bay (USA) Santa Clara (USA)
Види Исто така
- mysqli_fetch_array() - Преземи го следниот ред од множеството резултати како асоцијативна, нумеричка низа, или и двете
- mysqli_fetch_column() - Преземи еден столб од следниот ред од множеството резултати
- mysqli_fetch_row() - Преземи го следниот ред од множеството резултати како нумеричка низа
- mysqli_fetch_object() . Множеството резултати секогаш ќе се итерира од првиот ред, без оглед на тековната позиција.
- mysqli_query() - Извршува прашање на базата на податоци
- mysqli_data_seek() - Го прилагодува покажувачот на резултатот на произволен ред во резултатот
Белешки од корисници 3 белешки
IMPORTANT NOTE:
If you were used to using code like this:
<?php
while(false !== ($row = mysql_fetch_assoc($result)))
{
//...
}
?>
You must change it to this for mysqli:
<?php
while(null !== ($row = mysqli_fetch_assoc($result)))
{
//...
}
?>
The former will cause your script to run until max_execution_time is reached.There is a difference between MariaDB and MySQL(>5.4) whether the input parameter (mysqli object) has data or is empty (it comes from a previus query).
-MariaDB: you get an exception:
Fatal error: Uncaught TypeError: mysqli_fetch_assoc(): Argument #1 ($result) must be of type mysqli_result
-MySQL: you can continue, in spite of not having data in the mysqli object.