Q&A

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);


이렇게 코드를 작성했습니다만 실제 table1 내에는 수십개의 자료가 있음에도 PHP상에서는 1개의 자료만 보입니다.

c.png

 

 

혹시나 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"]);
    }


이렇게 작성해보니 5개 모두 출력은 됩니다만...

원래 PHP에서 COUNT개수만큼 반복문을 돌려서 각각의 값을 다시 담아야 되는걸까요...??

가져 올때부터 PHP의 배열에 자동으로 결과값을 담아주는건 불가능한걸까요??

댓글 8

  • 쿼리를 담으면 row[0], row[1] 이렇게 담겨있진 않으신가요?
  • @raindrop
    while을 사용하면 row[0], row[1] 형식으로 안에 배열이 담기는데
    while없이 바로 변수(배열)에 넣으면 1개행만 입력되네요

    아무래도 while이 필요한 모양인가봅니다.... 답변 감사합니다!!
  • mysqli_fetch_array라고 되어 있으니 마치 결과값을 배열로 넣어주는것 같지만, 사실 mysqli_fetch_row, mysqli_fetch_assoc와 같이 레코드 하나씩만 가져올수 있는 함수입니다.

    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;
    }

    와 같이 배열에 요소를 대입하셔야 합니다.
  • @YJSoft
    덕분에 데이터를 어떻게 가져와서 처리할것인지 제대로 알게되었습니다.
    이해하기 쉬운 멋진 답변 너무 감사합니다 :)
  • mysqli가 원래 불친절하기로 유명합니다.

    새로 작성하시는 코드라면 mysqli 함수와 씨름하지 말고 PDO를 사용해 보세요.
    라이믹스 2.0을 비롯하여 국내외의 거의 모든 PHP 프레임워크가 PDO로 통일하는 데는 이유가 있습니다.

    쿼리하기가 너무나 편리합니다.

     

    $rows = $conn->query($sql)->fetchAll();

  • @기진곰
    PDO가 뭔지 찾아보았더니 훨씬 간결하고 쓰임성 많고 거기에 SQL인젝션 또한 막아준다고 하니
    저같은 초보가 실수 할지도 모르는 상황에 딱이네요... 이런 좋은 것이 있었다니 ㅠㅠㅠ
    기존 mysqli 로 작성한것들 PDO기반으로 바꿔서 사용해야 겠습니다.
    좋은 정보 감사합니다!!
  • @binst
    네, 지금 PDO를 배워두시면 나중에 라이믹스에서 커스텀 쿼리가 필요할 때도
    유용하게 사용하실 수 있을 거예요.^^
  • @기진곰
    저도 PDO 한번 참고해야겠네용..