このページではソースコードの一部分を簡単な解説をしています。
作成した掲示板はコチラから
ソースコードはgithubにあります
概要
PHPを使いデータベースを操作する練習の為に掲示板を作ってみました。データベースはSQliteを使用し、プログラミング言語PHPのPDOを使ってデーターベースを操作しています。
データベースの作成
データベースの作成にはVisual Studio Codeの拡張機能SQliteを使用しました。

テーブルの内容は下の図のようにしました。

idカラムはレス番号、nameカラムには投稿者の名前、dateカラムには投稿日時、messageカラムにはコメントの内容をそれぞれ保持させていきます。
PHPのPDOを使ってデータベースに接続
PDOクラスをインスタンス化する。
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でクエリを実行をします。
// テーブルへ追加
$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メソッドを使用しクエリを実行させます。
テーブルからデータを取得
// データーを取得
$stmt = $pdo->prepare("SELECT * FROM テーブル名");
$stmt->execute();
$stmts = $stmt->fetchAll();データを追加したときと同じようにprepareメソッドにクエリをセットしてexecuteメソッドでクエリを実行します。取得したデータはfetchAllメソッドで取得できます。
CSRF対策を行う
トークンを利用したCSRF対策を行いまいした。
最後までお読みいただきありがとうございました。
