# PHP02 ## 授業資料 [ダウンロードリンク](https://drive.google.com/drive/folders/1FChvsX5Tlplwr9Qg1S7BMQQyDrtnC4aq?usp=sharing) ## 1章:データベースとは ### まずはphpMyAdminとMySQLの場所を知る #### 1. MAMPを起動 #### 2. WebStartボタンから起動トップページを表示 #### 3. ページの真ん中MySQLのタブからphpMyAdminのリンクをクリック #### 4. 起動した画面がMySQLを管理するphpMyAdminの画面が表示されます。 ### データベースを作ってみよう #### 1. データベースタブをクリック #### 2. データベースを作成から以下の名前で作成 ``` データベース名:gs_db 照合順序:utf8_unicode_ci ``` #### 3. 作成ボタンをクリック 左側にgs_dbというデータベースができていると思います。 現在は空っぽです。 ### テーブルを作成してみよう データベースの中にデータ管理用の表としてテーブルを作成します。 今回はアンケートシステムのDBとしてテーブルを構築します。 #### 1. テーブルを作成に以下の設定で作成 ``` テーブル名:gs_an_table カラム数:5 ``` #### 2. カラムを作成していく ``` id: int(12) AUTO_INCREMENT PRIMARY KEY name: var_char(64) email: var_char(128) naiyou: text indate: datetime ``` #### 3. 実行してみる ## 2章:データベース操作 MySQLではデータベース言語SQLというものを使って操作します。 大きく次の4つの操作になります。登録・表示(取得)・更新・削除 *SQL文ではシングルコーテーション! *phpMyAdminのSQLタブから入力してクエリを実行してみる。 ### INSERT(データ登録) #### 1. 書式 ``` INSERT INTO テーブル名(カラム1,カラム2,カラム3・・・) VALUES (値1,値2,値3・・・); ``` #### 2. データ登録SQLを書いてみよう ``` INSERT INTO gs_an_table(id,name,email,naiyou,indate) VALUES (NULL,'テスト太郎','test1@test.jp','test',sysdate()); ``` #### 3. 3~4個ほどデータを追加してみよう ### SELECT(データ取得) #### 1. 書式 ``` SELECT 表示するカラム FROM テーブル名; ``` #### 2. データ取得の基本バリエーション ``` SELECT * FROM gs_an_table; --全カラム指定取得 SELECT name FROM gs_an_table; --単一カラム指定取得 SELECT name,email FROM gs_an_table; --複数カラム指定取得 SELECT * FROM gs_an_table WHERE name='テスト太郎'; --WHEREを使った特定データの取得 ``` #### 3. 条件付き検索取得 ``` --演算子を使った検索 SELECT * FROM テーブル名 WHERE id = 1; SELECT * FROM テーブル名 WHERE id >= 3; --AND,ORで検索条件を複数指定 SELECT * FROM テーブル名 WHERE id = 1 OR id = 2; SELECT * FROM テーブル名 WHERE id = 1 AND id = 2; --曖昧検索 SELECT * FROM テーブル名 WHERE indate LIKE '2021-06%'; SELECT * FROM テーブル名 WHERE email LIKE '%@gmail.com'; SELECT * FROM テーブル名 WHERE email LIKE '%@%'; ``` #### 4. ソート取得と制限取得 ``` --ソート 書式:SELECT * FROM テーブル名 ORDER BY ソート対象カラム ソートルール; SELECT * FROM テーブル名 ORDER BY id DESC; --降順 SELECT * FROM テーブル名 ORDER BY id ASC; --昇順 --取得数制限 書式:SELECT * FROM テーブル名 LIMIT ***; SELECT * FROM テーブル名 LIMIT 5; --最大5件取得 SELECT * FROM テーブル名 LIMIT 3,5; --3番目のデータから最大5件取得 ``` ## 3章:PHPからMySQLを操作 PHP(サーバー言語)からMySQLにデータを送って保存したり取得したりしてみる。 ### PHPからデータ登録 #### 1. index.phpのformの設定を完成させる ``` method:POST action:insert.php ``` #### 2. insert.phpに処理を追記 ``` //1. POSTデータ取得 $name = $_POST["name"]; $email = $_POST["email"]; $naiyou = $_POST["naiyou"]; //2. DB接続します try { //Password:MAMP='root',XAMPP='' $pdo = new PDO('mysql:dbname=gs_db;charset=utf8;host=localhost','root','root'); } catch (PDOException $e) { exit('DBConnectError:'.$e->getMessage()); } //3.SQL文を用意(データ登録:INSERT) $stmt = $pdo->prepare( "INSERT INTO gs_an_table( id, name, email, naiyou, indate ) VALUES( NULL, :name, :email, :naiyou, sysdate() )" ); // 4. バインド変数を用意 $stmt->bindValue(':name', $name, PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) $stmt->bindValue(':email', $email, PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) $stmt->bindValue(':naiyou', $naiyou, PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) // 5. 実行 $status = $stmt->execute(); ``` #### 3. リダイレクト処理を追加 ``` //6.データ登録処理後 if($status==false){ //SQL実行時にエラーがある場合(エラーオブジェクト取得して表示) $error = $stmt->errorInfo(); exit("ErrorMassage:".$error[2]); }else{ //5.index.phpへリダイレクト header('Location: index.php');//ヘッダーロケーション(リダイレクト) } ``` ### PHPからデータ取得と表示 #### 1. selsect.phpでデータ取得 ``` //1. DB接続します try { //Password:MAMP='root',XAMPP='' $pdo = new PDO('mysql:dbname=gs_db;charset=utf8;host=localhost','root','root'); } catch (PDOException $e) { exit('DBConnectError:'.$e->getMessage()); } //2.SQL文を用意(データ取得:SELECT) $stmt = $pdo->prepare("SELECT * FROM gs_an_table"); //3. 実行 $status = $stmt->execute(); ``` #### 2. selsect.phpでデータ表示処理 先程の処理のすぐ下に以下を追記 ``` //4.データ表示 $view="";//空のviewを作成 if($status==false) { //execute(SQL実行時にエラーがある場合) $error = $stmt->errorInfo(); exit("ErrorQuery:".$error[2]); }else{ //Selectデータの数だけ自動でループしてくれる //FETCH_ASSOC=http://php.net/manual/ja/pdostatement.fetch.php while( $result = $stmt->fetch(PDO::FETCH_ASSOC)){ $view .= "<p>"; $view .= $result['indate'].':'.$result['name'].' '.$result['text'].' '.$result['email']; $view .= "</p>"; } } ``` #### 3. select.phpの表示用HTMLにviewを呼び出す ``` <div> <div class="container jumbotron"><?= $view ?></div> </div> ``` #### 4. select.phpにfuncs.phpを読み込んで関数を使う ``` <?php require_once('funcs.php');  //select.phpの一番上に1行追記 ``` viewの処理の部分でXSS対策のh関数を呼び出す ``` $view .= "<p>"; $view .= h($result['indate']).':'.h($result['name']).' '.h($result['text']).' '.h($result['email']); $view .= "</p>"; ``` 今日やったおまじないの部分、 -> この矢印の部分について、気になる方はclassという概念を学ぶ必要があります。 classについて、もし興味ある方はこちら https://twitter.com/daisu_yamazaki/status/1375797555339030533?s=21