PHPプログラミング

レシピ

データベース 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);

データの更新が成功すると、$restrueが入り、失敗して更新できなかった場合はfalseが入ります。

最後に、$resの内容をvar_dump関数で出力し、mysqli_close関数でデータベースとの接続を解除して終了です。

結果を出力してデータベースとの接続を解除

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

以上がmysqli系の関数を使ったデータの更新方法でした。

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

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

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