mysqli_fetch_assoc 사용 방법

11381 단어 PHP

독학 엔지니어 학습 (레슨 5)



궁금한 것



sql을 사용하지 않고 php만으로 독서 로그의 등록, 표시를 실시하고 있었을 때는 foreach를 사용해 독서 로그의 표시를 실시하고 있었다. 그래서 sql에서 데이터를 추출하여 로그를 표시시킬 때도 foreach를 사용해도 되는 것은 아닐까 생각했다. 그러나 foreach로 하려고 하면 데이터가 하나밖에 표시할 수 없었다.
아래와 같은 이미지↓
    $sql_log = 'SELECT * FROM logs';

    $results = mysqli_query($link, $sql_log);

    $logs = mysqli_fetch_assoc($results);

    foreach ($logs as $log) {
        echo '書籍名:' . $log['title'] . PHP_EOL;
        echo '著者名:' . $log['author'] . PHP_EOL;
        echo '読書状況:' . $log['status'] . PHP_EOL;
        echo '評価:' . $log['score'] . PHP_EOL;
        echo '感想:' . $log['imp'] . PHP_EOL;
        echo '-------------' . PHP_EOL;
    }

이 기술을 하면 처음의 하나의 데이터 밖에 추출되지 않았다.

    var_export(mysqli_fetch_assoc($results));

시도하면,

첫 번째 데이터만을 얻을 수 있었다. foreach 사용하는 경우는 이 $logs안에 전부의 배열이 들어 있지 않으면 반복은 할 수 없기 때문에 1개째의 표시 밖에 되지 않았다고 하는 바람에 해석했다.

결국 동영상으로 취급하고 있던 대로의 while문으로 구현
mysqli_fetch_assoc 자체를 반복해야 했다.
    $sql_log = 'SELECT * FROM logs';

    $results = mysqli_query($link, $sql_log);

    while ($log = mysqli_fetch_assoc($results)) {
        echo '書籍名:' . $log['title'] . PHP_EOL;
        echo '著者名:' . $log['author'] . PHP_EOL;
        echo '読書状況:' . $log['status'] . PHP_EOL;
        echo '評価:' . $log['score'] . PHP_EOL;
        echo '感想:' . $log['imp'] . PHP_EOL;
        echo '-------------' . PHP_EOL;
    }


php의 함수



mysqli_query : 데이터베이스에서 쿼리를 실행 (함수), 실행하면 mysqli_result 객체를 반환합니다.
mysqli_fetch_assoc($result) : 결과의 행을 연상 배열로 취득. $result는 mysqli_result 객체
mysqli_free_result : 결과에서 사용한 메모리를 해제합니다. 이것을 실행하지 않으면 부하가 무거워지므로 기본한다.
    $result = mysqli_query($link, $sql);

    //tureとfalseで返ってくるのでその結果に合わせてif文を使用
    if ($result) {
        echo 'データを追加しました' . PHP_EOL;
    } else {
        echo 'Error:データの追加に失敗しました' . PHP_EOL;
        echo 'Debugging error; ' . mysqli_error($link) . PHP_EOL;
    }

    //上記の$resultの結果を使用して実行(while文などで配列の中身を取り出したりできる)
    mysqli_fetch_assoc($result);

    while ($company = mysqli_fetch_assoc($results)) {
        echo '会社名;' . $company['name'] .PHP_EOL;
        echo '代表者名;' . $company['founder'] .PHP_EOL;
    }

    //メモリの解放
    mysqli_free_result($result);

mysqli_connect : sql과 연결하기
    mysqli_connect(string $host, string $username, string $passwd, string $dbname);

mysqli_close : sql과의 연결 끊기
    mysqli_close($hoge);

유효성 검사에 사용된 함수



strlen: 문자 수 계산
in_array : 특정 문자열을 포함하는지 결정
    strlen($hoge)

    $status = [
        '未読',
        '読んでる',
        '読了'
    ];

    if (!in_array($log['status'], $status, true)) {
        $errors['status'] = '読書状況は未読、読んでる、読了のいずれかを入力してください';
    }

SQL의 함수



지식



· 코드 편집기에서 여러 줄로 작성하는 방법 (EOT 부분이 키)
    $sql = <<<EOT
    INSERT INTO logs (
        ...
    ) VALUES (
        ...
    )
    EOT;

・sql상에서 일본어가 문자화되지 않기 위한 기술
    $link = mysqli_connect('db', 'book_log', 'pass', 'book_log');
    $link->set_charset('utf8');

좋은 웹페이지 즐겨찾기