질문/조언질답게시판
Extra Form
PHP 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의 배열에 자동으로 결과값을 담아주는건 불가능한걸까요??

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

    아무래도 while이 필요한 모양인가봅니다.... 답변 감사합니다!!
  • profile
    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;
    }

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

    mysqli가 원래 불친절하기로 유명합니다.

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

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

     

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

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