테스트 사이트 - 개발 중인 베타 버전입니다

문법 한번 봐주세요. 채택완료

컴대장 6년 전 조회 2,350

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

 $div .= ''; }

 

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

 

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

 

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

 

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

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

답변 5개

채택된 답변
+20 포인트
잉끼s
6년 전

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

sql_fetch_array 으로 쓰셔야 합니다.

 

while($row = sql_fetch_array($result)

  $div .= '';

 

이렇게 쓰셔야 합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 4개

컴대장
6년 전
네...맞습니다. 지금까지 그렇게 써왔는데요.
금번에 제작의뢰를 했더니 위와 같이 플밍이 되어 있네요.
mysql 상위 버전에서는 가능할 수도 있다고 생각합니다.
좀더 검색해 보고 이유를 찾아봐야겠습니다.
댓글 고맙습니다.
잉끼s
6년 전
그누보드의 sql_query() 와는 다른 함수인 것 같네요.
sql_query()는 php 기본 함수가 아니라 사용자 함수입니다.
아마도 개발하신 분이 가능하게 작업을 해두었을수도 있겠네요.

sql_query() 선언한 곳을 찾아서 확인해보시기 바랍니다.
컴대장
6년 전
잉끼s // 저도 그런가 싶어 ....그누원본 함수와 비교해 봤는데 똑같았습니다.
이놈의 php 버전도 높아지고, mysql 버전도 높아지고....
나의 머리 수준은 낮아지고....걱정입니다. 자동 퇴출되려나 봅니다.ㅠㅠ
불량학생™
6년 전
아. 그러네요 ㅋㅋㅋ
역시 기본에 충실해야 된다는 사실을 다시 깨닫습니다.

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

잉끼s
6년 전

</p>

<p>$sql = " select * {$sql_common} {$sql_search} {$sql_order} limit {$from_record}, {$rows} ";

$result = sql_query($sql);</p>

<p>

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

    print_r($v);</p>

<p>

 

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

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

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

컴대장
6년 전
하하하....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]))

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

이렇게 또 한가지씩 배워가는군요. 고맙습니다.
잉끼s
6년 전
저도 관련 내용 구글링 해보았지만
잘 모르겠더라고요. ^^
뭐 버전 업하면서 개선되었겠지요 ^^
5.2에서 해봣는데, 5.2이에서도 안되더라고요.

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

e
6년 전

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

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

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

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

6년 전

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

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

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

로그인 후 평가할 수 있습니다

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

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

  print_r2($key);

  print_r2($val); }

 

먼저 확인해 보세요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

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

로그인