PHP 8.4.3 Released!

mysql_fetch_array

(PHP 4, PHP 5)

mysql_fetch_array連想配列、添字配列、またはその両方として結果の行を取得する

警告

この拡張モジュールは PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除されました。 MySQLi あるいは PDO_MySQL を使うべきです。詳細な情報は MySQL: API の選択 を参照ください。 この関数の代替として、これらが使えます。

説明

mysql_fetch_array(resource $result, int $result_type = MYSQL_BOTH): array

取得した行に対応する配列を返し、内部のデータポインタを前に進めます。

パラメータ

result

評価された結果を示す resource。この結果は、mysql_query() のコールにより得られたものです。

result_type

取得する配列の形式です。以下の定数値をとります。: MYSQL_ASSOC, MYSQL_NUM, そして MYSQL_BOTH

戻り値

取得した行をあらわす文字列の配列を返します。もし行が存在しない場合は false を返します。返される配列の形式は、result_type がどのように指定されているかによります。MYSQL_BOTH(デフォルト) を利用すると、連想添字と数値添字を共に持つ配列を取得します。 MYSQL_ASSOC を利用すると( mysql_fetch_assoc() の動作と同様に)連想添字のみが取得され、 MYSQL_NUM を利用すると (mysql_fetch_row() の動作と同様に)数値添字のみが 取得されます。

結果の中で同じフィールド名のカラムが 2 つ以上ある場合、 最後のカラムが優先されます。 同名の他のカラムにアクセスするには、そのカラムの数値インデックスを 使うかまたはカラムの別名を定義する必要があります。 カラムの別名を定義した場合は、本来の列名でそのカラムにアクセスすることは できません。

例1 重複した列名に対して別名を定義する問い合わせ

SELECT table1.field AS foo, table2.field AS bar FROM table1, table2

例2 mysql_fetch_array()MYSQL_NUM とともに利用する

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_NUM)) {
printf("ID: %s Name: %s", $row[0], $row[1]);
}

mysql_free_result($result);
?>

例3 mysql_fetch_array()MYSQL_ASSOC とともに利用する

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf("ID: %s Name: %s", $row["id"], $row["name"]);
}

mysql_free_result($result);
?>

例4 mysql_fetch_array()MYSQL_BOTH とともに利用する

<?php
mysql_connect
("localhost", "mysql_user", "mysql_password") or
die(
"Could not connect: " . mysql_error());
mysql_select_db("mydb");

$result = mysql_query("SELECT id, name FROM mytable");

while (
$row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf ("ID: %s Name: %s", $row[0], $row["name"]);
}

mysql_free_result($result);
?>

注意

注意: パフォーマンス

特筆すべき点として、mysql_fetch_array() が 著しい付加価値があるにもかかわらず、 mysql_fetch_row()より それほど遅くはないということが言えます。

注意: この関数により返されるフィー ルド名は 大文字小文字を区別 します。

注意: この関数は、 NULL フィールドに PHPの null 値を設定します。

参考

add a note

User Contributed Notes 2 notes

up
17
robjohnson at black-hole dot com
22 years ago
Benchmark on a table with 38567 rows:

mysql_fetch_array
MYSQL_BOTH: 6.01940000057 secs
MYSQL_NUM: 3.22173595428 secs
MYSQL_ASSOC: 3.92950594425 secs

mysql_fetch_row: 2.35096800327 secs
mysql_fetch_assoc: 2.92349803448 secs

As you can see, it's twice as effecient to fetch either an array or a hash, rather than getting both. it's even faster to use fetch_row rather than passing fetch_array MYSQL_NUM, or fetch_assoc rather than fetch_array MYSQL_ASSOC. Don't fetch BOTH unless you really need them, and most of the time you don't.
up
8
KingIsulgard
16 years ago
I have found a way to put all results from the select query in an array in one line.

// Read records
$result = mysql_query("SELECT * FROM table;") or die(mysql_error());

// Put them in array
for($i = 0; $array[$i] = mysql_fetch_assoc($result); $i++) ;

// Delete last empty one
array_pop($array);

You need to delete the last one because this will always be empty.

By this you can easily read the entire table to an array and preserve the keys of the table columns. Very handy.
To Top