データーベース
データーベース作成
通常のプログラムではなくXAMPPのMysqlでデーターベースの表を作成する。
XAMPPを起動→Mysqlのadminをクリック→左のバーのデーターベース名を選択(最初の場合は新規作成から新しく作る)→上バーのSQLを押す
Mysqlのプログラムを入れる→実行
データーベースの表が作成できる。
| プログラム | 説明 | |
| データーベース表作成「練習の表」 | CREATE TABLE 練習の表 ( | |
| タイトル「番号、数字、優先キー、自動割り振り」 | 番号 INT PRIMARY KEY AUTO_INCREMENT, | PRIMARY KEY は表の中心になるタイトル。 同じ値を持つものがなく、必ず値を入れる必要がある。検索が速くなる。 途中のテキストには「,」がいるが最後のテキストには「,」がいらない。 |
| タイトル「タイトル1、文字、空でない」 | タイトル1 VARCHAR(255) NOT NULL, | |
| タイトル「画像、データ、空でない」 | 画像 LONGBLOB NOT NULL | |
| データーベース表閉じる | ); |
データベースの表削除
上バーの操作を押す→下にあるテーブルを削除するを押す
データーベース接続
ここからはPHPのプログラム
接続.php
| プログラム | 説明 | |
| データーベース接続「サーバー名、データーベース名、ユーザー名、パスワード」 | try { $pdo = new PDO("mysql:host=○○;dbname=△△;charset=utf8mb4", "××", "□□"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); } catch (PDOException $e) { echo "接続失敗: " . $e->getMessage(); } | ○○はホストのサーバー名 △△はデーターベース名 ××はユーザー名 □□はパスワード名 XAMPPの場合 サーバー名 localhost データーベース名 自分で作成した名前 ユーザー名 root パスワード 空白にする エラー時に例外を投げて伝える。本物のプリペアドステートメントを使いセキュリティ強化する。 |
他のページで接続するときrequire_once '接続.php';とかき接続のプログラムを読み込む。
} catch (PDOException $e) {の上に直接接続時のプログラムを書くこともできる。
データーベース入力
| プログラム | 説明 | |
| 接続枠上 | require_once '接続.php'; try { | |
| 入力「練習の表 タイトル1=サンプルA タイトル2=サンプルB」 | $stmt = $pdo->prepare("INSERT INTO 練習の表 (タイトル1, タイトル2) VALUES (?, ?)"); $stmt->execute([$サンプルA, $サンプルB]); | ?の文字のところにexecute内の[]の中の内容が入る。 ?を使わずにそのままユーザーが入れた内容を使ってはいけない。 |
| よくない例 | $stmt = $pdo->prepare("INSERT INTO 練習の表 (タイトル1, タイトル2) VALUES ($サンプルA, $サンプルB)"); | $Aの中身がSQLのプログラムだと実行してしまう。SQLインジェクションという。 |
| 接続枠下 | } catch (PDOException $e) { echo "データ取得エラー: " . htmlspecialchars($e->getMessage()); } |
データーベース上書き変更
| プログラム | 説明 | |
| 接続枠上 | require_once '接続.php'; try { | |
| 上書き「練習の表 番号が1の行 タイトル1=新しいタイトルA タイトル2=新しいタイトルB」 | stmt = $pdo->prepare("UPDATE 練習の表 SET タイトル1 = ?, タイトル2 = ? WHERE 番号 = ?"); $stmt->execute([$新しいタイトルA, $新しいタイトルB, $A]); | 番号が1の部分のタイトル1とタイトル2を上書き 番号が存在しない場合は追加されない。 |
| 接続枠下 | } catch (PDOException $e) { echo "データ取得エラー: " . htmlspecialchars($e->getMessage()); } |
データーベース削除
| プログラム | 説明 | |
| 接続枠上 | require_once '接続.php'; try { | |
| 削除「練習の表 番号が1の行」 | $stmt = $pdo->prepare("DELETE FROM 練習の表 WHERE 番号 = ?"); $stmt->execute([$A]); | 番号が1の行の内容を削除 |
| 接続枠下 | } catch (PDOException $e) { echo "データ取得エラー: " . htmlspecialchars($e->getMessage()); } |
データーベース表示
| プログラム | 説明 | |
| 接続枠上 | require_once '接続.php'; try { | |
| 表示「すべて」 | $stmt = $pdo->query("SELECT * FROM 練習の表"); | |
| 繰り返し処理 | while ($行 = $stmt->fetch(PDO::FETCH_ASSOC)) { | |
| テキスト表示「$行["タイトル1"]」 | print 枠($行['タイトル'])."<br>"; | 表示するときにfunction 枠($テキスト){return htmlspecialchars($テキスト, ENT_QUOTES, 'UTF-8');}のプログラムを使う |
| テキスト表示「$行["画像"]」 | $画像 = base64_encode($行['画像']); print "<img src='data:image/jpeg;base64,<?=$画像?>}' alt='画像'><br>"; | 画像のときはimgのタグを使って書く。 <?php print "〇〇";?>は省略して<?=〇〇?>という風に書ける。 |
| 繰り返し処理閉じる | } | |
| 接続枠下 | } catch (PDOException $e) { echo "データ取得エラー: " . htmlspecialchars($e->getMessage()); } |
