[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