レシピ
データベース MySQL / MariaDB
mysqliでMySQL/MariaDBのデータを更新:UPDATE
今回はMySQLiとSQLのUPDATE文を使い、MySQL/MariaDBのデータベースに登録されたデータを更新する方法について解説します。
この記事のポイント
- mysqliを使ってMySQL/MariaDBのデータを更新する
- SQLのUPDATE文の書き方を確認する
- 具体的なコード例で処理内容が理解できる
目次
データベースのデータを更新する
今回はMySQL/MariaDBにあらかじめ登録されているデータを更新する方法について解説します。
テーブルは「mysqliでテーブルを作成(CREATE TABLE)」の記事と同じものを使います。
まず最初に、SQLのUPDATE文の基本的な書き方から確認していていきます。
今回はMySQLiクラスを使う方法、mysqli系の関数を使う方法の2通りを解説しますが、使用するSQLは同じ内容です。
SQLのUPDATE文
UPDATE テーブル名 SET
カラム名1 ='更新後の値1',
カラム名2 ='更新後の値2',
カラム名3 ='更新後の値3'
WHERE カラム名 = 値;
テーブル名、更新するカラムと値のセット、そして更新データを特定するカラムと値のセットをそれぞれ指定します。
「SET」以降に更新したいカラム名と値のセットを必要なだけ記述し、「WHERE」に更新データを特定する条件を記述します。
例えば、今回の「gc_granola」にあるデータを置き換えるとすると次のようになります。
SQLのUPDATE文
UPDATE gc_granola SET
name = '有機野菜グラノーラ',
price = 580,
modify_datetime = '2018-09-20 10:00:00'
WHERE id = 5;
値が整数の場合は「‘ (シングルクォーテーション)」で囲む必要はないため、「price」や「id」の値では省略しています。
もちろん囲っても問題ありません。
このSQLの内容を踏まえて、「オブジェクトを使った書き方」と「関数を使った書き方」の2パターンをそれぞれみていきましょう。
なお、どちらの方法もMySQL/MariaDBはまったく同じコードで動作します。
また、データベースへの接続までは「mysqliを使ってMySQL/MariaDBのデータベースへ接続」と同様です。
より詳しくはこちらの記事をご覧ください。
オブジェクトを使った書き方
MySQLiクラスのインスタンスを生成し、データベースのデータを更新する方法です。
オブジェクトを使ったコード例
$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');
// 現在の日付を取得
$date = date('Y-m-d H:i:s');
// UPDATEのSQL作成
$sql = "UPDATE gc_granola SET
name='有機野菜グラノーラ',
price=580,
modify_datetime='$date'
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クラスのインスタンスを生成するのと同時にデータベースにアクセスします。
もしここで接続にエラーがあった場合は、3行目のif文の中にあるecho関数でエラー内容が出力されます。
エラー番号のconnect_errnoプロパティとエラー内容のconnect_errorプロパティをそれぞれ出力し、エラーの内容を特定するヒントを表示します。
続いて、データベースの文字コードの設定です。
文字コードの設定
$mysqli->set_charset('utf8');
その次では、date関数で日時を取得して$dateに格納します。
ここで取得した日時は、後述するデータの更新日時として使用します。
更新日時の取得
// 現在の日付を取得
$date = date('Y-m-d H:i:s');
続いてSQLの作成です。
データを更新するためのUPDATE文を記述し、$sqlに入れます。
SQLを作成
// UPDATEのSQL作成
$sql = "UPDATE gc_granola SET
name='有機野菜グラノーラ',
price=580,
modify_datetime='$date'
WHERE id = 14";
作成したSQLをqueryメソッドで実行します。
このタイミングでデータベースにあるデータが更新されます。
SQLを実行
// SQL実行
$res = $mysqli->query($sql);
$resにはqueryメソッドの実行結果が入り、更新が成功したらtrue、失敗した場合はfalseになります。
最後に、$resの内容をvar_dump関数で出力し、closeメソッドでデータベースとの接続を解除して終了です。
結果を出力してデータベースとの接続を解除
var_dump($res);
$mysqli->close();
今回は単純に$resの内容を出力していますが、通常はif文などの条件式で値を確認し、更新が成功したかどうかを判定したりします。
以上がオブジェクト(MySQLiクラスのインスタンス)を使った更新方法でした。
関数を使った書き方
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');
// 現在の日付を取得
$date = date('Y-m-d H:i:s');
// UPDATEのSQL作成
$sql = "UPDATE gc_granola SET
name='フルーツたっぷりグラノーラ',
price=600,
modify_datetime='$date'
WHERE id = 10";
// 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系関数でも使用していきます。
3行目〜5行目のif文では、接続にエラーがあった場合のみエラー内容を出力します。
mysqli_connect_errno関数で接続エラーがあったかを確認し、もしエラーだった場合はecho関数でエラー番号と内容を出力しています。
続いて、データベースの文字コードを設定します。
mysqli_set_charset関数には第1引数に1行目で取得したハンドラを渡し、第2引数で文字コードを指定します。
文字コードの設定
mysqli_set_charset( $db_link, 'utf8');
この後に使用するmysqli_query関数など、mysqli系の関数は同様に第1引数でハンドラを渡して使用します。
その次では、date関数で日時を取得します。
ここで取得した日時はデータの更新日時として登録します。
更新日時の取得
// 現在の日付を取得
$date = date('Y-m-d H:i:s');
続いてSQLの作成です。
データを更新するUPDATE文を記述し、$sqlに入れます。
SQLを作成
// UPDATEのSQL作成
$sql = "UPDATE gc_granola SET
name='フルーツたっぷりグラノーラ',
price=600,
modify_datetime='$date'
WHERE id = 10";
作成したSQLをmysqli_query関数に渡して実行します。
SQLを実行
// SQL実行
$res = mysqli_query( $db_link, $sql);
データの更新が成功すると、$resにtrueが入り、失敗して更新できなかった場合はfalseが入ります。
最後に、$resの内容をvar_dump関数で出力し、mysqli_close関数でデータベースとの接続を解除して終了です。
結果を出力してデータベースとの接続を解除
var_dump($res);
mysqli_close($db_link);
以上がmysqli系の関数を使ったデータの更新方法でした。
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。