# ヤマトデジタルアカデミーWEBプログラミング講座8回目 ## 初期準備 ### MAMPを起動しておいてください。 MySQLの起動が確認までしておきましょう。 MySQLが起動しない場合の対処法 https://codeforfun.jp/mamp-mysql-not-starting-solutioin/ ### 授業資料のダウンロードと解凍 Teams上にアップロードした資料をシンクライアント上にダウンロードしてください。 Zipファイルですので解凍してください。 本日使う授業フォルダ08_phpに入っているもの。 ``` css fonts js index.php insert.php ``` ### 08_phpフォルダをMAMPのhtdocs階層に移動させてください。 先ほどCドライブにダウンロードしたMAMPの中にhtdocsというフォルダがあります。 ここに授業資料の「08_php」フォルダを移動してください! windows向け補足記事 ダウンロードから起動までの手順 https://codeforfun.jp/how-to-install-mamp-windows-and-mac/#MAMPWindows MySQLが起動しない場合の対処法 https://codeforfun.jp/mamp-mysql-not-starting-solutioin/ ## データベース作成 ### まずはphpMyAdminとMySQLの場所を知る #### 1. MAMPを起動 #### 2. WebStartボタンから起動トップページを表示 #### 3. ページの真ん中MySQLのタブからphpMyAdminのリンクをクリック #### 4. 起動した画面がMySQLを管理するphpMyAdminの画面が表示されます。 ### データベースを作成 #### 1. データベースタブをクリック #### 2. データベースを作成から以下の名前で作成 ``` データベース名:ymt_db 照合順序:utf8_unicode_ci ``` #### 3. 作成ボタンをクリック 左側にymt_dbというデータベースができていると思います。 現在は空っぽです。 ### テーブルを作成してみよう データベースの中にデータ管理用の表としてテーブルを作成します。 今回はアンケートシステムのDBとしてテーブルを構築します。 #### 1. テーブルを作成に以下の設定で作成 ``` テーブル名:chat_table カラム数:4 ``` #### 2. カラムを作成していく ``` id: int(12) AUTO_INCREMENT PRIMARY KEY name: var_char(64) body: text indate: datetime ``` #### 3. 実行するとテーブルが完成している。 ## データベース操作 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件取得 ``` ## PHPからMySQLを操作 PHP(サーバー言語)からMySQLにデータを送って保存したり取得したりしてみる。 ### PHPからデータ登録 #### 1. index.phpのformの設定を完成させる ``` method:POST action:insert.php ``` #### 2. insert.phpに処理を追記 ``` //1. POSTデータ取得 $name = $_POST["name"]; $body = $_POST["body"]; //2. DB接続します try { //Password:MAMP='root'' $pdo = new PDO('mysql:dbname=ymt_db;charset=utf8;host=localhost','root','root'); } catch (PDOException $e) { exit('DBConnectError:'.$e->getMessage()); } //3.SQL文を用意(データ登録:INSERT) $stmt = $pdo->prepare( "INSERT INTO chat_table( id, name, body, indate ) VALUES( NULL, :name, :body, sysdate() )" ); // 4. バインド変数を用意 $stmt->bindValue(':name', $name, PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) $stmt->bindValue(':body', $body, PDO::PARAM_STR); //Integer(数値の場合 PDO::PARAM_INT) // 5. 実行 $status = $stmt->execute(); ``` ### PHPからデータ取得と表示 #### 1. index.phpの29行目以降からPHPの処理でデータ取得 ``` //1. DB接続します try { //Password:MAMP='root',XAMPP='' $pdo = new PDO('mysql:dbname=ymt_db;charset=utf8;host=localhost','root','root'); } catch (PDOException $e) { exit('DBConnectError:'.$e->getMessage()); } //2.SQL文を用意(データ取得:SELECT文) $stmt = $pdo->prepare("SELECT * FROM chat_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 .= "<div class='arrow_box'>"; $view .= $result['indate'].':'.$result['name']; $view .= "<br><br>"; $view .= $result['body']; $view .= "</div>"; } } ``` #### 3. index.phpの表示用HTMLにviewを呼び出す ``` <div class="container jumbotron"><?= $view ?></div> ```