PHP ㅡ MYSQL 에서 LIMIT 5를 걸면 1개만 출력됩니다.
CMS/프레임워크 | 사용안함 |
---|---|
개발 언어 | PHP 7.3 |
안녕하세요. 오랜만에 들리게 되었습니다. ㅠㅠ
간단하게 PHP에서 MYSQL DB를 직접 제어하는것을 만들고 있습니다만
$sql = "SELECT time,c1 FROM table1 ORDER BY time DESC LIMIT 5";
$rst = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($rst);
print_r($row);
$rst = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($rst);
print_r($row);
이렇게 코드를 작성했습니다만 실제 table1 내에는 수십개의 자료가 있음에도 PHP상에서는 1개의 자료만 보입니다.
혹시나 SQL을 잘못작성했나 하여 PHPMYADMIN 상에서 직접
SELECT time,c1 FROM table1 ORDER BY time DESC LIMIT 5 을
돌려보면 PHPMYADMIN 에서는 마지막 5개가 정상적으로 출력됩니다.
아무래도 PHP로 넘어오면서 1개의 행을 제외한 나머지가 사라지는듯 한데... 구글을 찾아보아도 여러 블로그에서
mysqli_fetch_array 이런식으로 담아오던데... 혹시 잘못된것일까요??
어떻게 해야 여러개의 행을 PHP 배열에 담을수 있을까요?? 매번 라이믹스 같은 만들어진 프로그램만 사용하려다가
직접 무언가를 해보려니 어렵네요 ㅠㅠ 고수분들의 조언 기다리겠습니다. 언제나 감사합니다!
추가 :
$sql = "SELECT time,c1 FROM table1 ORDER BY time DESC LIMIT 5";
$rst = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($rst)) {
printf ("%s : %s <br />", $row["time"], $row["c1"]);
}
$rst = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_assoc($rst)) {
printf ("%s : %s <br />", $row["time"], $row["c1"]);
}
이렇게 작성해보니 5개 모두 출력은 됩니다만...
원래 PHP에서 COUNT개수만큼 반복문을 돌려서 각각의 값을 다시 담아야 되는걸까요...??
가져 올때부터 PHP의 배열에 자동으로 결과값을 담아주는건 불가능한걸까요??
댓글 8
while없이 바로 변수(배열)에 넣으면 1개행만 입력되네요
아무래도 while이 필요한 모양인가봅니다.... 답변 감사합니다!!
1. mysqli_fetch_row는 데이터 열을 row[0], row[1] 형태로 접근할수 있습니다.
2. mysqli_fetch_assoc는 데이터를 row["Name"], row["Birthday"] 형태로 접근할수 있습니다.
3. mysqli_fetch_array는 인자에 따라 row 형태, assoc 형태, 혹은 두 형태 모두 접근할수 있습니다.(기본값은 두 형태 모두 접근 가능한 것이라 row[0], row["Birthday"] 와 같이 섞어 쓸 수 있습니다.
즉, 실제로 결과를 배열로 가져오시려면
$rows = array();
$result = mysqli_query($connection, "select university from universities_alpha");
while($row = mysqli_fetch_array($result)) {
$rows[] = $row;
}
와 같이 배열에 요소를 대입하셔야 합니다.
이해하기 쉬운 멋진 답변 너무 감사합니다 :)
mysqli가 원래 불친절하기로 유명합니다.
새로 작성하시는 코드라면 mysqli 함수와 씨름하지 말고 PDO를 사용해 보세요.
라이믹스 2.0을 비롯하여 국내외의 거의 모든 PHP 프레임워크가 PDO로 통일하는 데는 이유가 있습니다.
쿼리하기가 너무나 편리합니다.
$rows = $conn->query($sql)->fetchAll();
저같은 초보가 실수 할지도 모르는 상황에 딱이네요... 이런 좋은 것이 있었다니 ㅠㅠㅠ
기존 mysqli 로 작성한것들 PDO기반으로 바꿔서 사용해야 겠습니다.
좋은 정보 감사합니다!!
유용하게 사용하실 수 있을 거예요.^^