目次
データの追加(挿入)と変更
前回の記事に引き続き、PDOクラスを用いてデータベースの操作を行います。
データベースへの接続を行う部分(PDO::construct)は前回の説明と同じなので省略します。
PDO::prepare
SQL文を実行する準備を行います。
$sql = 'INSERT INTO users (name, age) VALUE (:name, :age)'; //データの挿入の場合
$sth = $pdo->prepare($sql);
$sql = 'UPDATE users SET name = :name, age = :age WHERE id = :id'; //データの変更の場合
$sth = $pdo->prepare($sql);
$sql = 'DELETE FROM users WHERE id = :id'; //データの削除の場合
$sth = $pdo->prepare($sql);
変数をSQL文の中に直接書くのは、SQLインジェクションの危険性が非常に高いです。したがって、パラメーターID(:name
の形)を用いて変数を組み込むようにします。
パラメーターIDを数値で指定する場合は、以下のように設定することもできます。
$sql = 'INSERT INTO users (name, age) VALUE (? ,?)';
PDOStatement::bindValue
SQL文中のパラメーターIDに変数をバインド(組み込み)します。
$name = "Mike";
$age = 29;
$sth->bindValue(':name',$name);
$sth->bindValue(':age',$age);
「bindValue」の代わりに「bindParam」というものも存在します。違いについては以下を参考にしてください。
PHP bindParam()の落とし穴とbindValue()メモ
PDOStatement::execute
SQL文を実行します。
$sth->execute();
コード全体
データの追加(挿入)
<?php
$dns = 'mysql:dbname=test;host=127.0.0.1;charset=utf8mb4';
$username = 'root';
$password = '';
$pdo = new PDO($dns, $username, $password);
$sql = 'INSERT INTO users (name, age) VALUE (:name, :age)';
$sth = $pdo->prepare($sql);
$name = "Mike";
$age = 29;
$sth->bindValue(':name',$name);
$sth->bindValue(':age',$age);
$sth->execute();
データの変更
<?php
$dns = 'mysql:dbname=test;host=127.0.0.1;charset=utf8mb4';
$username = 'root';
$password = '';
$pdo = new PDO($dns, $username, $password);
$sql = 'UPDATE users SET name = :name, age = :age WHERE id = :id';
$sth = $pdo->prepare($sql);
$name = "John";
$age = 31;
$id = 1;
$sth->bindValue(':name',$name);
$sth->bindValue(':age',$age);
$sth->bindValue(':id',$id);
$sth->execute();
データの削除
<?php
$dns = 'mysql:dbname=test;host=127.0.0.1;charset=utf8mb4';
$username = 'root';
$password = '';
$pdo = new PDO($dns, $username, $password);
$sql = 'DELETE FROM users WHERE id = :id';
$sth = $pdo->prepare($sql);
$id = 2;
$sth->bindValue(':id',$id);
$sth->execute();