[PHP] MySQLi prepared statement 결과를 배열로 얻기

아래의 쿼리를 실행한 후 MySQLi prepared statement(이하 stmt) 의 결과를 field=>value 형태의 배열로 얻는 방법이다.

select name, email from member where id = 'abc'

stmt 실행 후 bind_result 메서드를 이용해 각 변수에 값을 얻게 되는데 쿼리문에 필드가 많을 경우 각각의 변수를 할당해야 하기 때문에 조금은 짜증나는 작업이 된다. 이 때 필드명을 키로 하는 배열로 결과를 얻게 되면 $row[‘name’] 의 형태로 사용할 수 있기 때문에 사용 상 편의성이 있다.

function get_stmt_assoc_array($stmt)
{
    $row = array();
    $result = array();
    $meta = $stmt->result_metadata();

    while ($field = $meta->fetch_field()) {
        $params[] = &$row[$field->name];
    }

    call_user_func_array(array($stmt, 'bind_result'), $params);

    while ($stmt->fetch()) {
        foreach($row as $key => $val)
        {
            $c[$key] = $val;
        }
        $result[] = $c;
    }

    return $result;
}

$sql = " select * from `member_table` where email = ? ";
$stmt = $mysqli->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param('s', $email);
$stmt->execute();

$data = get_stmt_assoc_array($stmt);
print_r($data);

$stmt->close();

출처 : http://us2.php.net/manual/en/mysqli-stmt.bind-result.php#85470

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

카카오톡 플러스친구 채팅 : NCUBE.NET

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.