PHPプログラミング

レシピ

データベース MySQL / MariaDB

mysqliでMySQL/MariaDBのデータを削除:DELETE

今回はMySQLiとSQLのDELETE文を使って、MySQL/MariaDBデータベースに登録されたデータを削除する方法について解説します。

この記事のポイント

  • mysqliでMySQL/MariaDBに登録されたデータを削除する
  • SQLのDELETE文の基本的な書き方がわかる
  • 具体的なコード例で処理内容が理解できる

目次

特定のデータを削除する

MySQLiクラスやmysqli_query関数を使って、接続したMySQL/MariaDBデータベースにある特定のデータを削除します。
テーブルは「mysqliでテーブルを作成(CREATE TABLE)」で作成したものと同じである前提で解説を進めます。

まず最初に、SQLのDELETE文の書き方を確認します。
この後にMySQLiクラスのインスタンス(オブジェクト)を使う方法と、mysqli系の関数を使う方法の2種類をそれぞれ解説していきますが、使用するSQLはどちらも同じです。

SQLのDELETE文の基本的な書き方

DELETE FROM テーブル名 WHERE カラム名 = ;

DELETE文は削除するデータを特定できればいいので、INSERT文やUPDATE文と比べるとシンプルになります。
今回のテーブル「gc_granola」にあるデータを削除する場合は、次のようなSQLになります。

SQLのDELETE文の基本的な書き方

DELETE FROM gc_granola WHERE id = 5;

この基本の形を踏まえて、「オブジェクト型」と「手続き型」の2パターンをみていきましょう。
いずれの方法も、MySQL/MariaDB共通で使用できます。

なお、データベースへの接続までは「mysqliを使ってMySQL/MariaDBのデータベースへ接続」と同様です。
より詳しくはこちらの記事をご覧ください。

オブジェクトを使った書き方

MySQLiクラスのインスタンスでSQLを実行する、オブジェクトを使った書き方を解説します。
今回のコードは次のようになります。

オブジェクトを使ったコード例

$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

$mysqli->set_charset('utf8');

// DELETEのSQL作成
$sql = "DELETE FROM gc_granola WHERE id = 14";

// SQL実行
$res = $mysqli->query($sql);

var_dump($res);
$mysqli->close();

実行結果

削除前のデータベース

削除を行う前のデータベース

削除後のデータベース

削除を行った後のデータベース

解説

コードを上から順に解説します。

最初の5行はデータベースへの接続を行っています。

データベースへの接続

$mysqli = new mysqli( 'host_name', 'user_name', 'password', 'database_name');

if( $mysqli->connect_errno ) {
	echo $mysqli->connect_errno . ' : ' . $mysqli->connect_error;
}

1行目でMySQLiクラスのインスタンスを作成するのと同時に、データベースの情報を渡して接続します。
接続結果はオブジェクトとして$mysqliに格納します。

3行目〜5行目のif文で接続エラーがあったかを確認しています。
具体的にはMySQLiのインスタンスにconnect_errnoプロパティが設定されているかで確認を行います。
もしエラー情報がある場合は、echo関数でエラー番号のconnect_errnoプロパティとエラー内容のconnect_errorプロパティを出力し、エラーの原因を表示します。

続いて、データベースを扱うにあたっての文字コードを設定します。

文字コードの設定

$mysqli->set_charset('utf8');

次に、削除を実行するためのSQLを作成します。
このSQLでは「id」に「14」を持つデータを削除する内容になっています。

SQLの作成

// DELETEのSQL作成
$sql = "DELETE FROM gc_granola WHERE id = 14";

作成したSQLをqueryメソッドで実行します。
実行結果は正常に処理されるとtrue、失敗したらfalseが返り値として$resに入ります。

SQLの実行

// SQL実行
$res = $mysqli->query($sql);

最後に、実行結果をvar_dump関数で出力し、closeメソッドで接続を解除して終了します。

実行結果を出力し、データベース接続を解除

var_dump($res);
$mysqli->close();

以上が削除に関する一通りの流れになります。
データは一度削除を実行すると、バックアップなどから戻さない限りは完全に削除されます。

関数を使った書き方

mysqli系の関数を使う方法を解説します。

関数を使ったコード例

$db_link = mysqli_connect( 'host_name', 'user_name', 'password', 'database_name');

if( mysqli_connect_errno($db_link) ) {
	echo mysqli_connect_errno($db_link) . ' : ' . mysqli_connect_error($db_link);
}

mysqli_set_charset( $db_link, 'utf8');

// DELETEのSQL作成
$sql = "DELETE FROM gc_granola WHERE id = 14";

// SQL実行
$res = mysqli_query( $db_link, $sql);

var_dump($res);
mysqli_close($db_link);

実行結果

実行結果は上記「オブジェクト型」と同様です。

解説

最初の5行はデータベースへの接続を行います。

データベースへの接続

$db_link = mysqli_connect( 'host_name', 'user_name', 'password', 'database_name');

if( mysqli_connect_errno($db_link) ) {
	echo mysqli_connect_errno($db_link) . ' : ' . mysqli_connect_error($db_link);
}

1行目のmysqli_connect関数を使ってデータベースに接続し、接続結果を$db_linkへ格納します。
$db_linkに入る接続情報は後述するmysqli_query関数などのmysqli系の関数でハンドラ(接続したデータベースを特定するオブジェクト)として使用します。

もし接続エラーがある場合、3行目〜5行目のif文でエラー内容を出力します。
エラー番号を出力するmysqli_connect_errno関数と、エラー内容を出力するmysqli_connect_error関数を使用して、エラーの原因を特定するための情報を表示します。

続いて、データベースを扱うにあたっての文字コードを設定します。

文字コードの設定

mysqli_set_charset( $db_link, 'utf8');

第1引数に1行目で取得したハンドラを渡し、第2引数に文字コードを指定します。
mysqli系の関数は、共通で第1引数にハンドラを渡す形となります。

続いて、SQLのDELETE文を作成し、$sqlへ格納します。

SQLの作成

// DELETEのSQL作成
$sql = "DELETE FROM gc_granola WHERE id = 14";

先ほど作成したSQLをmysqli_query関数で実行します。
実行結果は正常に処理されるとtrue、失敗したらfalseを返すので、その値を$resに格納します。

SQLの実行

// SQL実行
$res = mysqli_query( $db_link, $sql);

最後に、実行結果をvar_dump関数で出力し、mysqli_close関数で接続を解除して終了です。

実行結果を出力し、データベース接続を解除

var_dump($res);
mysqli_close($db_link);

以上が関数を使った場合の流れでした。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

ありがとうございます。
コメントを送信しました。