본문 바로가기

DB/MY-SQL

[MY-SQL] mysql_fetch_row, mysql_fetch_array, mysql_fetch_assoc


초보분들에게 유용할까 해서....흠..

이 두 함수는 대개 별 차이점이 없다고 생각할 수 있습니다.
그냥 배열을 정의 하는것이라 생각하고 걍 사용할수도 있을겁니다.
하지만 차이점이 있죠..

다음의 예를 먼저 보시고 차이점이 뭔지 생각해보세요.:)

Mysql_fetch_row사용 예

<?
$connect=mysql_connect('localhost','user id','password');
mysql_select_db("dbname",$connect);

$query="select num,title,content from board";
$result=mysql_query($query,$connect);
$row=mysql_fetch_row($result); 

echo "$row[0],$row[1],$row[2]";
?>

Mysql_fetch_array사용 예

<?
$connect=mysql_connect('localhost','user id','password');
mysql_select_db("dbname",$connect);

$query="select num,title,content from board";
$result=mysql_query($query,$connect);
$row=mysql_fetch_array($result);

echo "$row[num],$row[title],$row[content]";
?>

위의 두 예제를 보시면 이해가 되시나요..row는 데이터베이스에서 가져온 데이터를 배열로 패치(fetch)할 때 0부터 배열이름을 부여합니다.하지만 array는 정돈된 데이터베이스의 필드이름을 그 값의 key값으로 가져오게 됩니다.

보통 select할 데이터 필드가 적을 경우라면 mysql_fetch_row를 사용해도 상관없지만 만약 select할 데이터 필드가 많다면 mysql_fetch_array를 사용하여 필드 이름을 배열의 key값으로 가져오는것이 훨씬 유리합니다.

만약 select할 필드 값이 많은데 mysql_fetch_row를 사용했다면 어떻게 될까영..후후..
고달프겠졍...하나,두울,세엣,네엣.......열...ㅡㅡ;

특별히 다른경우가 아니라면 mysql_fetch_array함수를 사용하는게 나을것 같네요...

출처 : http://blog.naver.com/apchima


mysql_fetch_array
결과를 필드이름 색인 또는 숫자 색인으로 된 배열로 반환

Description
array mysql_fetch_array( resource result [, int result_type] )

Paremeters

  • result
    구해진 결과 resource. 이 결과는 mysql_query()에서 불려진 데이터.
  • result_type
    추출될 배열 타입. 상수이며 다음 값을 가질 수 있다.
    MYSQL_ASSOC, MYSQL_NUM와 기본값인 MYSQL_BOTH

Return Values
데이터베이스 테이블로부터 가져온 행에 대응되는 배열로 돌려주고, 더이상 가져올 행이 없을 경우 FALSE를 반환한다.

mysql_fetch_array()는 mysql_fetch_row()에서 확장된 함수이다.
결과 배열에 자료가 저장되고 배열의 색인으로 번호가 사용된다.
또한, 배열의 색인으로 테이블의 필드 이름으로도 사용할 수 있다.
결과로 두 개 이상의 동일한 필드 이름을 가진 열이 있다면, 마지막 열이 우선권을 가진다.
동일한 다른 열을 사용하기 위해서는 색인 번호를 이용하거나 질의 문장에서 열의 별명을 주어 이용하여야 한다.
mysql_fetch_array()는 필드 이름으로 된 색인이 추가되지만, mysql_fetch_row() 보다 느려지지는 않는다.

/* Query with aliased duplicate field names */
SELECT table1.field AS foo, table2.field AS bar FROM table1, table2

.

<?php
/* mysql_fetch_array() with MYSQL_NUM */

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 );
?>

.

<?php
/* mysql_fetch_array() with MYSQL_ASSOC */

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 );
?>

.

<?php
/* mysql_fetch_array() with MYSQL_BOTH */
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_row
결과를 숫자색인으로 된 배열로 반환

Description
array mysql_fetch_row( resource result )

Paremeters
  • result
    구해진 결과 resource. 이 결과는 mysql_query()에서 불려진 데이터.
Return Values
행(row)에 대응되는 숫자색인으로 된 배열을 반환, 가져올 값이 없을 경우 FALSE를 반환한다.

mysql_fetch_row()는 특정 result identifier로부터 한 행의 데이터를 가져오며, 배열로 얻을 수 있다. 각 결과 열(column)은 0부터 시작하는 숫자색인으로 저장된다.

<?php
/* Fetching one row with mysql_fetch_row() */

$result = mysql_query( "SELECT id,email FROM people WHERE id = '42'" );
if ( !$result ) {
echo 'Could not run query: ' . mysql_error();
exit;
}

$row = mysql_fetch_row( $result );
echo $row[0]; // 42
echo $row[1]; // the email value
?>


mysql_fetch_assoc
결과를 필드이름 색인으로 된 배열로 반환

Description
array mysql_fetch_assoc( resource result )

Parameters
  • result
    구해진 결과 resource. 이 결과는 mysql_query()에서 불려진 데이터.
Return Values
필드이름의 색인을 가진 배열로 돌려주고, 가져올 행이 없을 경우 FALSE값을 반환한다.

mysql_fetch_assoc()는 mysql_fetch_array()의 두번째 인자로 MYSQL_ASSOC를 사용한 경우과 동일하게 작동한다. 이 방식은 mysql_fetch_array()의 본래의 동작 방법이다.
숫자 색인 방식과 필드이름 색인을 동시에 사용하려면, mysql_fetch_array()를 사용하면 된다.
결과로 동일한 필드 이름을 가진 열(column)이 있다면, 마지막 열이 우선권을 가진다.
동일한 다른 열을 사용하기 위해서는 색인 번호도 추가된 mysql_fetch_array()를 사용한다.
mysql_fetch_assoc()는 필드이름으로 된 색인이 추가되지만, mysql_fetch_row() 보다 느려지지는 않는다.

<?php
/* mysql_fetch_assoc() 사용 예 */

$conn = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db( "mydbname" );

$result = mysql_query( "SELECT id as userid, fullname, userstatus FROM sometable WHERE userstatus = 1" );
while ( $row = mysql_fetch_assoc( $result ) ) {
echo $row["userid"];
echo $row["fullname"];
echo $row["userstatus"];
}
mysql_free_result( $result );
?>

출처 : http://www.oops4u.com