문법 한번 봐주세요.

문법 한번 봐주세요.

QA

문법 한번 봐주세요.

본문

$room = sql_query(" select * from {$g5['r_table']} where (1) and `r_use` = 'y' ");
foreach($room as $key => $val) {

 $div .= '<option value="'.$val['r_idx'].'">'.$val['r_name'].'</option>';
}

 

r_table에 r_use인 레코드가 2개 있다고 가정하면...

 

r_idx 필드와 r_name필드로 셀렉트 박스를 보여주려고 합니다.

 

 while문으로 많이 해봤는데 foreach문으로 하려니 에러가 나네요..ㅎ

 

고수님의 가르침을 기다립니다. 감사합니다.

이 질문에 댓글 쓰기 :

답변 5

sql_query() 로 가져온 값으로는 foreach()를 쓸 수 없습니다.

sql_fetch_array 으로 쓰셔야 합니다.

 

while($row = sql_fetch_array($result)

  $div .= '<option value="'.$row['r_idx'].'">'.$row['r_name'].'</option>';

 

이렇게 쓰셔야 합니다.

네...맞습니다. 지금까지 그렇게 써왔는데요.
금번에 제작의뢰를 했더니 위와 같이 플밍이 되어 있네요.
mysql 상위 버전에서는 가능할 수도 있다고 생각합니다.
좀더 검색해 보고 이유를 찾아봐야겠습니다.
댓글 고맙습니다.

그누보드의 sql_query() 와는 다른 함수인 것 같네요.
sql_query()는 php 기본 함수가 아니라 사용자 함수입니다.
아마도 개발하신 분이 가능하게 작업을 해두었을수도 있겠네요.

sql_query() 선언한 곳을 찾아서 확인해보시기 바랍니다.

잉끼s // 저도 그런가 싶어 ....그누원본 함수와 비교해 봤는데 똑같았습니다.
이놈의 php 버전도 높아지고, mysql 버전도 높아지고....
나의 머리 수준은 낮아지고....걱정입니다. 자동 퇴출되려나 봅니다.ㅠㅠ


$sql = " select * {$sql_common} {$sql_search} {$sql_order} limit {$from_record}, {$rows} ";
$result = sql_query($sql);

foreach($result as $k=>$v){
    print_r($v);

 

php 7.0 대에서 확인해보니깐 잘 되네요.

오 ~ 새로운 거 배웠네요. 감사 합니다. ^^

 

하하하....php 5.3.X도 되는걸로 알고 있습니다.
저는 그 5.0.X 버전이라 안되었구요...ㅠㅠ
그래서
foreach 문을 주석처리하고 아래와 같이 처리했습니다.

//foreach($result as $key => $val) {
while ($val = sql_fetch_array($result)) {

$data[] = $val;
$div[] = unserialize($val['div_info']);
}
신기하게 쿼리는 mysql에서 수행하고 배열에 넣어주는데

php버전과 무슨 상관이 있을까요?

그리고 또 한가지가 있더군요.

필드에 값을 추가할때 가변필드(무한대)처리가 쉬워졌다는것...

2차원 배열에 들어있는 날짜값을 아래처럼 루프를  돌리면 에러가 안납니다.

date('Y-n-j', strtotime($data[$i]))

날짜가 없다고 경고가 떠서 첨자를 아래와 같이 설정하니 값이 나오더군요.

date('Y-n-j', strtotime($data[0][$i]))

암튼 상위버전으로 갈수록 이상해져 가는것 같습니다..ㅎㅎ

이렇게 또 한가지씩 배워가는군요. 고맙습니다.

foreach($room as $key => $val) {

  print_r2($key);

  print_r2($val);
}

 

먼저 확인해 보세요

댓글 감사합니다.
Warning: Invalid argument supplied for foreach()
foreach문에서 에러가 발생하네요.
분명히 된다는데 저의 서버에서는 안되네요.
설마 php 버전에 따라 foreach문이 다른것은 아니겠죠?
아~ 힘드네요. 환경이 달라지니...

잠정적인 결론....mysql 버전에 따른 문제가 아닐까 추측해 봅니다.

혹시 mysql 5.0.X에서 5.5.X 업그레드해도 이전 db는 문제가 없는지 모르겠네요.

다음주 월요일 업그레이드 하고 말꺼얌~~ㅠㅠ

for($i=0; $row=sql_fetch_array($room); $i++) {

이렇게 사용하셔야 합니다.

sql_fetch_array  이 구분이 들어가야 배열로 값을 가져옵니다.

 

네...저도 주로 이용하는 방법인데요. 금번 제작의뢰한 소스가 저렇게 되어있는데 경고 메시지만 뜨고 뿌려주질 못하네요.
혹시나 mysql 상위버전에서 저렇게해도 가능한지 월요일에 업그레이드해서 돌려봐야겠네요.
조건 감사합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 42
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT