채택완료

sql_query / foreach 학문적 궁금증

$sql = "SELECT vs_date FROM {$g5['visit_sum_table']}";
$result = sql_query($sql);
print_r2($result);

foreach ($result as $row) {
    $count = sql_fetch("SELECT COUNT(*) AS cnt FROM {$g5['visit_table']} WHERE vi_date = '{$row['vs_date']}'");

    ....

 

위 코드에서 파란색부분의 $result 값은 아래처럼 배열형태입니다.

mysqli_result Object
(
    [current_field] => 0
    [field_count] => 1
    [lengths] => 
    [num_rows] => 87
    [type] => 0
)

 

그런데, foreach 반복문에서 $result를 $row 로 치환 시,

어떻게 해서 $row값에 해당 테이블 행의 컬럼과 값이 들어갈 수 있는지 궁금합니다.

(예) $row['vs_date']

 

보통, as로 치환 시, 키=>값  (또는, 그냥 값) 형태로 담기는 걸로 아는데, 

그럴 경우, $row에 담기는 것은 $result 결과에 나온 배열키가 맞는 것 같은데 (예: $row['type'])

어떻게 해서 $row에 해당 테이블의 컬럼명이 배열키로 사용될 수 있는지 궁금합니다.

 

 

|

답변 2개 / 댓글 1개

채택된 답변
+20 포인트

https://stackoverflow.com/a/41199224

(mysqli_result object는 Traversable 인터페이스를 지원하고, 반복되면 내부적으로 fetch()를 호출한다?)

 

$result는 배열이 아니라 객체(Object) 입니다. (mysqli_result Object) 

배열인 경우 print_r() 출력시 Array ( [~] => ~) 같은 형태로 나옵니다.

 

저도 처음 알게 된 사실이라.. 이정도 밖에 찾지 못했습니다.

답변에 대한 댓글 1개

자세한 설명과 유익한 좌표 소개 정말 감사합니다.

OOP에서 지원하는 

Operator overloading(Implicit type casting  관련)을 이해하시면 간단한 개념입니다.

 

답변을 작성하려면 로그인이 필요합니다.