[PHP] mysqli 의 쿼리 결과 다루기

mysqli 에서 SELECT 쿼리를 실행한 후, 그 결과값을 뽑아 내는 방법을 간단히 보겠습니다.

$mysqli = new mysqli($DB[‘host’], $DB[‘id’], $DB[‘pw’], $DB[‘db’]);
if (mysqli_connect_error()) {
exit(‘Connect Error (‘ . mysqli_connect_errno() . ‘) ‘. mysqli_connect_error());
}

$q = “SELECT * FROM ap_member WHERE id=’$user_id'”;
$result = $mysqli->query( $q);

위처럼 루틴하게 mysqli 연결의 끈을 생성시키고, 쿼리를 실행시킵니다.
실행결과는 $result 에 담겨있지요.

$result->num_rows

위처럼 하면, 쿼리의 결과로 넘어온 행의 갯수를 알수 있습니다.

$row = $result->fetch_array(MYSQLI_ASSOC);

위처럼 하면, 넘어온 결과를 한 행씩 패치해서 $row 라는 배열에 담아낼 수 있습니다.

fetch_array()함수의 인자로 들어갈 수 있는 값이 3개가 있네요.

php.net 에서 설명하고 있는 차이점입니다.

/* numeric array */
$row = $result->fetch_array(MYSQLI_NUM);
printf (“%s (%s)\n”, $row[0], $row[1]);

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

/* associative and numeric array */
$row = $result->fetch_array(MYSQLI_BOTH);
printf (“%s (%s)\n”, $row[0], $row[“CountryCode”]);

MYSQLI_NUM 으로 패치를 할 경우, 배열의 각 값에 접근하기 위해서는 숫자 첨자를 이용해야합니다.

우리의 예처럼 MYSQLI_ASSOC 로 패치할 경우에는 테이블의 필드명을 첨자로 해서 값에 접근할 수 있습니다.

이것, 저것 둘 다 이용하고 싶으면, MYSQLI_BOTH 를 함수 인자로 사용하면 됩니다.

$result->free();

쿼리의 결과를 이용하고 난 후에는 불필요한 리소스 낭비를 위해서 메모리를 해제 시켜줍니다.

Leave a Reply