レシピ
データベース 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);
以上が関数を使った場合の流れでした。
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。