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

게시글 데이터를 다른 페이지에서 불러올 때 foreach 와 for 차이 채택완료

coDribble 11개월 전 조회 2,346

</p>

<p><?php</p>

<p>$sql = " select * from {$write_table} where wr_is_comment = 0 order by wr_id desc ";

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

<p> </p>

<p>foreach ( sql_fetch_array($result) as $row )

{

    echo $row['wr_subject'];

?></p>

<p><?php

}</p>

<p>for($i=0;$row=sql_fetch_array($result);$i++)

{

    echo $row['wr_subject'];

?>

<?php

}

?></p>

<p>

 

위처럼 foreach 로 게시글 데이터를 출력하면 한글이 깨지고,

for 로 돌리면 제대로 출력되는데

차이가 왜 생기는지가 궁금합니다...;;

 

어쩔땐 foreach 로 돌려도 제대로 출력되던데... 또 어쩔땐 외계어로 한글이 깨지더라구요...;;

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

답변 2개

채택된 답변
+20 포인트
11개월 전

for문은 매 반복마다 sql_fetch_array()를 실행하여 다음 행을 순차적으로 가져옵니다.

sql_fetch_array()는 DB에서 데이터를 원래 인코딩 그대로 가져옵니다.

다만 foreach 의 경우는 결과를 한번만 실행하고 그 결과 배열의 각 요소를 순환합니다.

 

따라서, 와일문 사용을 하시면 해결할 수 있습니다.

</p>

<p>while($row = sql_fetch_array($result)) {</p>

<p>echo $row['wr_subject'];</p>

<p>}</p>

<p>

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

답변에 대한 댓글 1개

c
coDribble
11개월 전
답변 감사드립니다!
말씀해주신 내용을 제가 이해한 거로는 $result 가 배열로 잡히고, $result 안에 다시 배열로 게시글들의 데이터들이 담겨있어서 fetch array 는 한 번만 실행되기 때문에 하나의 게시글 데이터의 정보만 출력한다...는 이해가 됐습니다!
그런데 데이터를 원래 인코딩 그대로 가져온다는게 이해가 잘 되질 않네요;;

하나의 게시글만 불러와서 fetch array 하면 안깨지고 제대로 출력될 것 같은데... 이 경우에도 인코딩 그대로 가져온다면 깨져야하는게 아닌가요...??? ㅇ.ㅇ;;

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

s
sinbi Expert
11개월 전

</p>

<p><?php

$write_table = 'g5_write_free';

$sql = " select * from {$write_table} where wr_is_comment = 0 order by wr_id desc ";

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

<p>foreach ( sql_fetch_array($result) as $k => $v)

{

    echo $k.' - '.$v.'
';

}

?></p>

<p>

 

foreach 반복문: 1개 배열(= 맨 처음 라인의 레코드)에 대해서 키와 값을 출력하는 구조

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

답변에 대한 댓글 1개

c
coDribble
11개월 전
답변 감사드립니다!
미니님 답변과 신비님 답변으로 fetch array 는 한 번만 실행한다는 것을 알게 됐습니다! :)
채택드리지 못해 죄송합니다ㅠ

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

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

로그인