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
https://stackoverflow.com/a/41199224
(mysqli_result object는 Traversable 인터페이스를 지원하고, 반복되면 내부적으로 fetch()를 호출한다?)
$result는 배열이 아니라 객체(Object) 입니다. (mysqli_result Object)
배열인 경우 print_r() 출력시 Array ( [~] => ~) 같은 형태로 나옵니다.
저도 처음 알게 된 사실이라.. 이정도 밖에 찾지 못했습니다.
OOP에서 지원하는
Operator overloading(Implicit type casting 관련)을 이해하시면 간단한 개념입니다.