質問: php初心者で現在、学習しているものです。 現在、従業員の管理画面を作成しており、従業の一覧表示画面を作成中です。 その画面の中で以下のコードが出てきましたが、コードの意味の理解が曖昧ですので、 教えていただければ幸いです。 以下のようなコードを書いております。 ``` setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//エラーハンドリング設定 //SQL文を使って、レコードを追加。 $sql='SELECT code,name FROM mst_staff WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute($data); //データベースから切断 $dbh=null; print'スタッフ一覧'; print''; while(true) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false){ break; } print''; print $rec['name']; print''; print''; } catch(Exception $e) { print 'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> ``` 1 以下のwhile文の理解を確認させてください。私の理解では、whileはループを表すコードで、 trueは存在を表す表現と理解しています。 従って、ここでは、「$recに何のデータもなければ、抜けなさい。ただ、データがある限りは、codeとnameを出力し続けなさい。」と言っていると理解しておりますが、この理解でよろしいでしょうか? ``` while(true) { } ``` 2while文の中に、「$rec=$stmt->fetch(PDO::FETCH_ASSOC);」というコードがあります。 このコードの理解は、「$stmtを表示するために、データベースに情報を取りに行き、$recという箱に入れなさい」という理解でよろしいでしょうか? 3tryから始まる構文の直後にも、データベースに接続するコード 「dbh=new PDO($dbn,$user,$password);」を書いています。while文の中で「$rec=$stmt->fetch(PDO::FETCH_ASSOC);」を使って、再度、データベースに接続する意味は何でしょうか?それとも、 これらのコードはそれぞれ別の意味をもっているのでしょうか? 上記の理解が非常に曖昧です。以上、ご助言何卒よろしくお願いいたします。
回答: 1はそんな感じです。 2の時点では、$stmtにはすでにデータベースから取ってきたデータが入っているとお考えください。それをfetch、一行取り出して$recという箱に入れろと書いてあります。すべて取り尽くしていたのなら$recには何も入らないので、次の行の if($rec==false) に引っかかるわけです。 3try直後のは「データベースと接続を確立する」、そのあとの $stmt->execute($data) が「その接続上でデータベースにデータを要求」、whileループ内のfetchで「取得したデータを一行ずつ読む」です。