このページではソースコードの一部分を簡単な解説をしています。
作成した掲示板はコチラから
ソースコードはgithubにあります
概要
PHPを使いデータベースを操作する練習の為に掲示板を作ってみました。データベースはSQliteを使用し、プログラミング言語PHPのPDOを使ってデーターベースを操作しています。
データベースの作成
データベースの作成にはVisual Studio Codeの拡張機能SQliteを使用しました。
テーブルの内容は下の図のようにしました。
idカラムはレス番号、nameカラムには投稿者の名前、dateカラムには投稿日時、messageカラムにはコメントの内容をそれぞれ保持させていきます。
PHPのPDOを使ってデータベースに接続
PDOクラスをインスタンス化する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function getPdoInstance() { try{ $pdo = new PDO('sqlite:データベースのパス'); // PDOの引数に(sqlite:データベースのパス)で指定する $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // エラーが起きた時例外を投げる $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); // 連想配列形式でデータを取得する $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // 指定した型に合わせる return $pdo; }catch(PDOException $e){ //echo $e->getMessage(); exit('エラーが発生しました'); } } |
PDOクラスの引数にデータベースファイルが置いてあるパスを指定します。これでデータベースの接続は完了です。必要に応じてsetAttributeメソットで属性をセットします。今回は3つ属性をセットしました。
フォームから送られてきた値をテーブルへ追加する
先程生成したPDOインスタンスを使いフォームから送られてきた値をテーブルへ追加していきます。フォームからは名前と日付とコメント内容が送られてくるので、それぞれを変数に代入した後にPDOでクエリを実行をします。
1 2 3 4 5 6 |
// テーブルへ追加 $stmt = $pdo->prepare("INSERT INTO test (name, date, message) VALUES (:name, :date, :message)"); $stmt->bindValue('name', $name); $stmt->bindValue('date', $date); $stmt->bindValue('message', $message); $stmt->execute(); |
prepareメソッドの引数にクエリをセットして、クエリの中に挿入したい変数がある場合はbindValueメソッドで割り当てたい値を引数にセットします。最後にexecuteメソッドを使用しクエリを実行させます。
テーブルからデータを取得
1 2 3 4 |
// データーを取得 $stmt = $pdo->prepare("SELECT * FROM テーブル名"); $stmt->execute(); $stmts = $stmt->fetchAll(); |
データを追加したときと同じようにprepareメソッドにクエリをセットしてexecuteメソッドでクエリを実行します。取得したデータはfetchAllメソッドで取得できます。
CSRF対策を行う
トークンを利用したCSRF対策を行いまいした。
最後までお読みいただきありがとうございました。