PHPでDBのデータを追加変更削除する【PDO②】

PHPでDBのデータを追加変更削除する【PDO②】

2021/02/11

データの追加(挿入)と変更

前回の記事に引き続き、PDOクラスを用いてデータベースの操作を行います。

PHPでDBからデータを取得する【PDO①】

ローカルでの実行環境を作成する まずローカル環境でPHPとSQL(MySQL)を…
tech.minagu.work

データベースへの接続を行う部分(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();