データベースMySQL関数(フェッチ[fetch])
- mysql_fetch_array〔連想配列、添字配列、またはその両方として結果の行を取得〕
- mysql_fetch_assoc〔連想配列として結果の行を取得〕
- mysql_fetch_field〔結果からカラム情報を取得しオブジェクトとして返す〕
- mysql_fetch_lengths〔結果における各出力の長さを取得〕
- mysql_fetch_object〔オブジェクトとして結果行を取得〕
- mysql_fetch_row〔添字配列として結果の行を取得〕
mysql_fetch_array
連想配列、添字配列、またはその両方として結果の行を取得
unknown
mysql_query()関数のコールで得られた結果の行を連想配列、添字配列、またはその両方で取得します。 最終行までいった場合に、FALSEを返します。 返される配列の形式は、オプションの第2引数結果タイプで指定できます。
この関数は、内部のデータポインタを前に進めます。 そのため、この関数を続けてコールした場合は、結果における次の行が返ります。
オプションの第2引数結果タイプは、以下の定数値をとります。
定数名 | 説明 |
---|---|
MYSQL_ASSOC | 連想配列(mysql_fetch_assoc()関数と同じ動作) |
MYSQL_NUM | 添字配列(mysql_fetch_row()関数を同じ動作) |
MYSQL_BOTH | 連想添字と数値添字を両方持つ配列(デフォルト) |
結果に同名のフィールド名が複数ある場合は、最後のカラムが優先されます。 同名の他のカラムにアクセスするには、mysql_fetch_row()関数を使用してそのカラムの数値添字を使うか、 またはカラムの別名(エイリアス)を定義します。カラムの別名を定義した場合は、本来の列名でそのカラムにアクセスできません。
#重複した列名に対して別名を定義する問合せ
SELECT table1.field AS foo, table2.field AS bar FROM table1, table2
この関数によって返されるフィールド名は大文字小文字を区別します。 NULLフィールドにPHPのNULL値を設定します。
<?
/* 例:mysql_fetch_array()関数をMYSQL_NUMと共に利用 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db("db_customer");
$sql="SELECT id, firstname, lastname FROM tbl_customer";
$res=mysql_query($sql,$dbc);
while($dat=mysql_fetch_array($res,MYSQL_NUM)){
printf("ID: %s NAME: %s %s",$dat[0],$dat[1],$dat[2]); echo "<br>";
}
mysql_free_result($res);
/* 例:mysql_fetch_array()関数をMYSQL_ASSOCと共に利用 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db("db_customer");
$sql="SELECT id, firstname, lastname FROM tbl_customer";
$res=mysql_query($sql,$dbc);
while($dat=mysql_fetch_array($res,MYSQL_ASSOC)){
printf("ID: %s NAME: %s %s",$dat["id"],$dat["firstname"],$dat["lastname"]); echo "<br>";
}
mysql_free_result($res);
/* 例:mysql_fetch_array()関数をMYSQL_BOTHと共に利用 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db("db_customer");
$sql="SELECT id, firstname, lastname FROM tbl_customer";
$res=mysql_query($sql,$dbc);
while($dat=mysql_fetch_array($res,MYSQL_BOTH)){
printf("ID: %s NAME: %s %s",$dat[0],$dat["firstname"],$dat["lastname"]); echo "<br>";
}
mysql_free_result($res);
/* 出力結果は、上記3つの例とも同様
ID: 1 NAME: ana sui
ID: 2 NAME: paul smith
ID: 16 NAME: tom cruise
*/
?>
mysql_fetch_assoc
連想配列として結果の行を取得
unknown
mysql_query()関数のコールで得られた結果の行を、連想配列として取得します。 指定した結果IDから1行分のデータを取得し、最終行までいった場合にFALSEを返します。
この関数は、内部のデータポインタを前に進めます。 そのため、この関数を続けてコールした場合は、結果における次の行が返ります。
mysql_fetch_array()関数の第2引数に定数MYSQL_ASSOCを指定してコールするのと同じ動作です。
結果に同名のフィールド名が複数ある場合は、最後のカラムが優先されます。 同名の他のカラムにアクセスするには、mysql_fetch_row()関数を使用してそのカラムの数値添字を使うか、 またはカラムの別名(エイリアス)を定義します。カラムの別名を定義した場合は、本来の列名でそのカラムにアクセスできません。
#重複した列名に対して別名を定義する問合せ
SELECT table1.field AS foo, table2.field AS bar FROM table1, table2
<?
/* 例1: mysql_fetch_assoc() の例 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db("db_customer");
$sql="SELECT id as userid, firstname, lastname FROM tbl_customer WHERE id=2";
$res=mysql_query($sql,$dbc) or die ("クエリ失敗 :".mysql_error());
if(mysql_num_rows($res)==0){
echo "データ行が見つかりません<br>";
exit;
}
// データ行が存在する間、それを $row に連想配列形式でセット
// 注: 結果が 1 行であることがわかっているのなら、ループ不要
// 注: ループ内で extract($row); を実行すれば、$userid, $firstname, $lastname 利用可
while($dat=mysql_fetch_assoc($res)){
//extract($dat);
//printf("ID: %s NAME %s %s<br>\n",$userid,$firstname,$lastname);
printf("ID: %s NAME: %s %s<br>\n",$dat["userid"],$dat["firstname"],$dat["lastname"]);
}
mysql_free_result($res);
/* 出力例
ID: 2 NAME: paul smith
*/
?>
<?
/* 例2: mysql_fetch_assoc() の例 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db("db_customer");
$sql="SELECT * FROM tbl_customer";
$res=mysql_query($sql,$dbc) or die ("クエリ失敗 :".mysql_error());
while($dat=mysql_fetch_assoc($res)){
print_r($dat); echo "<br>\n";
}
//再度ループするには、フィールドオフセットを先頭に戻すこと!
mysql_data_seek($res, 0);
while($dat=mysql_fetch_assoc($res)){
print_r($dat); echo "<br>\n";
}
/* 出力例
Array ( [id] => 1 [firstname] => ana [lastname] => sui [age] => 33 )
Array ( [id] => 2 [firstname] => paul [lastname] => smith [age] => 20 )
Array ( [id] => 16 [firstname] => tom [lastname] => cruise [age] => 40 )
Array ( [id] => 1 [firstname] => ana [lastname] => sui [age] => 33 )
Array ( [id] => 2 [firstname] => paul [lastname] => smith [age] => 20 )
Array ( [id] => 16 [firstname] => tom [lastname] => cruise [age] => 40 )
*/
?>
mysql_fetch_field
結果からカラム情報を取得しオブジェクトとして返す
unknown
mysql_query()関数のコールで得られた結果から、フィールド情報を含むオブジェクトを返します。 この関数は、特定のクエリ結果の中のフィールド関連情報を取得するために使用できます。
オプションの第2引数フィールドオフセットは0始まりです。 フィールドオフセットの指定がない場合は、まだこの関数で情報を取得されていないフィールドのうち最初のものが適用されます。
この関数によって返されるフィールド名は大文字小文字を区別します。
プロパティ名 | 説明 |
---|---|
name | カラム名 |
table | カラムが属しているテーブルの名前 |
def | カラムのデフォルト値 |
length | カラムの最大長 |
not_null | カラムがNULL値をとることができない場合は、1 |
primary_key | カラムが主キーなら、1 |
unique_key | カラムがユニークキーなら、1 |
multiple_key | カラムが非ユニークキーなら、1 |
numeric | カラムが数値(numeric)であれば、1 |
blob | カラムがBLOBであれば、1 |
type | カラムの型 |
unsignd | カラムが符号無し(unisigned)であれば、1 |
zerofill | カラムがゼロで埋められている(zero-filled)の場合に、1 |
<?
/* 例 1. mysql_fetch_field() の例 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
$db_selected=mysql_select_db("db_customer",$dbc) or die("データベース選択失敗 :".mysql_error());
$sql="SELECT * FROM tbl_customer";
$res=mysql_query($sql,$dbc) or die("クエリ失敗 :".mysql_error());
// カラムのメタデータを取得する
$i=0;
while($i<mysql_num_fields($res)){
echo "カラム $i の情報:<br>\n";
$meta=mysql_fetch_field($res,$i) or die("情報が見つかりません :".mysql_error());
echo "<pre>
blob: $meta->blob
max_length: $meta->max_length
multiple_key: $meta->multiple_key
name: $meta->name
not_null: $meta->not_null
numeric: $meta->numeric
primary_key: $meta->primary_key
table: $meta->table
type: $meta->type
default: $meta->def
unique_key: $meta->unique_key
unsigned: $meta->unsigned
zerofill: $meta->zerofill
</pre>
";
$i++;
}
mysql_free_result($res);
/* 出力例
カラム 0 の情報:
blob: 0
max_length: 2
multiple_key: 0
name: id
not_null: 1
numeric: 1
primary_key: 1
table: tbl_customer
type: int
default:
unique_key: 0
unsigned: 0
zerofill: 0
カラム 1 の情報:
blob: 0
max_length: 4
multiple_key: 0
name: firstname
not_null: 1
numeric: 0
primary_key: 0
table: tbl_customer
type: string
default:
unique_key: 0
unsigned: 0
zerofill: 0
*/
?>
mysql_fetch_lengths
結果における各出力の長さを取得
unknown
mysql_fetch_row()関数、mysql_fetch_array()関数、mysql_fetch_object()関数により、直近に取得された行における各フィールドの長さを格納した配列を返します。 失敗した場合にFALSEを返します。
オプションの第2引数フィールドオフセットは0始まりです。 フィールドオフセットの指定がない場合は、FALSEを返します。
<?
$dbc=@mysql_connect("localhost","root","admin") or die("MySQL接続失敗: ".mysql_error());
$sql="SELECT FirstName, LastName FROM db_user.tbl_customer WHERE UserID='U002'";
$result=mysql_query($sql) or die('クエリ送信失敗: '.mysql_error());
/* 連想配列として結果の行を取得 */
$row=mysql_fetch_assoc($result);
print_r($row); //Array ( [FirstName] => 太郎 [LastName] => 田中 )
/* 結果における各出力の長さを取得 */
$lengths=mysql_fetch_lengths($result);
print_r($lengths); //Array ( [0] => 4 [1] => 4 )
?>
mysql_fetch_object
オブジェクトとして結果行を取得
unknown
mysql_query()関数のコールで得られた結果の行をオブジェクトとして取得します。 指定した結果IDから1行分のデータを取得し、最終行までいった場合にFALSEを返します。
この関数は、内部のデータポインタを前に進めます。 そのため、この関数を続けてコールした場合は、結果における次の行が返ります。
この関数は、配列の代わりにオブジェクトが返される点を除いて、mysql_fetch_array()関数と類似しています。 フィールド名によってのみデータにアクセスできます(数値フィールドオフセットによるアクセス不可)。
この関数によって返されるフィールド名は、大文字小文字を区別します。 また、NULLフィールドには、PHPのNULL値を設定します。
<?
/* 例1: mysql_fetch_object() の例 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db("db_customr");
$sql="SELECT * FROM tbl_customer";
$res=mysql_query($sql,$dbc);
while($dat=mysql_fetch_object($res)){
printf("ID: %s NAME: %s %s<br>\n", $dat->id, $dat->firstname, $dat->lastname);
}
mysql_free_result($res);
?>
mysql_fetch_row
添字配列として結果の行を取得
unknown
mysql_query()関数のコールで得られた結果の行を、添字配列(0始まり)として取得します。 指定した結果IDから1行分のデータを取得し、最終行までいった場合にFALSEを返します。
mysql_fetch_array()関数の第2引数に定数MYSQL_NUMを指定してコールするのと同じ動作です。
この関数は、内部のデータポインタを前に進めます。 そのため、この関数を続けてコールした場合は、結果における次の行が返ります。
この関数は、NULLフィールドにPHPのNULL値を設定します。
<?
/* 例1: mysql_fetch_row() の例 */
$dbc=mysql_connect("localhost","root","") or die("MySQL接続失敗 :".mysql_error());
mysql_select_db("db_customer");
$sql="SELECT id, firstname, lastname FROM tbl_customer WHERE id=2";
$res=mysql_query($sql,$dbc) or die("クエリ失敗 :".mysql_error());
$dat=mysql_fetch_row($res);
printf("ID: %s NAME: %s %s<br>\n",$dat[0],$dat[1],$dat[2]);
/* 出力例
ID: 2 NAME: paul smith
*/
?>