PHPプログラミング

レシピ

データベース MySQL / MariaDB

mysqliでMySQL/MariaDBにデータを登録:INSERT

今回はMySQLiとSQLのINSERT文を使って、データベースへデータの登録を行う方法を解説します。

この記事のポイント

  • mysqliを使ってMySQL / MariaDBデータベースにデータを登録する
  • 具体的なコード例で処理内容が理解できる

目次

データベースへデータを登録する

MySQLiクラスのqueryメソッド、もしくはmysqli_query関数使って、データベースに新しくデータを登録していきます。
テーブルについては「mysqliでテーブルを作成(CREATE TABLE)」で作成したものと同じテーブルを前提にします。

まず、データを登録するためのSQLであるINSERT文の基本的な形を確認しましょう。

オブジェクト型のコード例

INSERT INTO テーブル名 (
	カラム1, カラム2, カラム3
) VALUES (
	'カラム1の値','カラム2の値','カラム3の値'
);

テーブル名、データを登録するカラム名、値の順にそれぞれ記述します。
値は文字列の場合のみ前後を「 (シングルクォーテーション)」で囲む必要があります。

今回のテーブル「gc_granola」の場合に置き換えると、次のようになります。

オブジェクト型のコード例

INSERT INTO gc_granola (
	name, price, best_before, modify_datetime, create_datetime
) VALUES (
	'グラノーラ', 300, '2019-04-01', '2018-09-20', '2018-09-20'
);

こちらのSQLを元に、「オブジェクトを使った書き方」と「関数を使った書き方」をそれぞれ使ってデータを登録する方法について解説していきます。
また、今回の方法はMySQL、MariaDBのいずれも同じコードで動作します。

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

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

まずは、オブジェクト型で書いた場合のコードです。

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

$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');

// INSERT
$sql = "INSERT INTO gc_granola (
	name, price, best_before, modify_datetime, create_datetime
) VALUES (
	'テストグラノーラ', 300, '2016-12-01 00:00:00', '$date', '$date'
)";
$res = $mysqli->query($sql);

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

実行結果

実行前のデータベース

実行前のデータベース

実行後のデータベース

実行後のデータベース

解説

コードを上から順に詳しくみていきましょう。

まず、最初の5行ではデータベースの接続を行います。
もし接続にエラーがあった場合は、if文の中にあるecho関数でエラー番号のconnect_errnoプロパティと、エラー内容のconnect_errorプロパティを出力します。

データベースに接続

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

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

続いて、set_charsetメソッドを使ってデータベースの文字コードを指定します。

文字コードの設定

$mysqli->set_charset('utf8');

データの更新日、登録日を登録するために、date関数で現在の日時を取得して$dateに入れます。
この値はINSERT文の中で使用します。

現在の日時を取得

// 現在の日付を取得
$date = date('Y-m-d H:i:s');

続いて、SQLを作成して$sqlに入れます。
上記で解説したINSERT文を記述します。
SQLは後述する「関数を使った方法」でも同じものを使用します。

SQLを作成

// INSERT
$sql = "INSERT INTO gc_granola (
	name, price, best_before, modify_datetime, create_datetime
) VALUES (
	'テストグラノーラ', 300, '2016-12-01 00:00:00', '$date', '$date'
)";

作成したSQLを、queryメソッドで実行します。
今回はINSERT文が実行され、SQLに記述した値が新しく1つデータベースへ追加されます。

SQLを実行

$res = $mysqli->query($sql);

$resにはqueryメソッドの返り値が入り、データの登録に成功したらtrue、失敗した場合はfalseが入ります。

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

実行結果を出力して終了

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');

// 現在の日付を取得
$date = date('Y-m-d H:i:s');

// INSERT
$sql = "INSERT INTO gc_granola (
	name, price, best_before, modify_datetime, create_datetime
) VALUES (
	'テストグラノーラ', 300, '2016-12-01 00:00:00', '$date', '$date'
)";
$res = mysqli_query( $db_link, $sql);

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

実行結果

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

解説

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

最初の5行はデータベースへの接続です。
1行目はmysqli_connect関数を使ってデータベースの接続を行い、接続結果を$db_linkに入れています。
この接続結果はハンドラとして後の処理でも使用します。

3行目〜5行目のif文では、データベース接続にエラーがあった場合にエラー内容が出力されます。
エラー番号をmysqli_connect_errno関数、エラー内容をmysqli_connect_error関数で出力し、エラーの原因を特定するための情報が表示されます。

データベースに接続

$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関数でデータベースの文字コードを設定します。
第1引数にハンドラ、第2引数に使用する文字コードを指定します。
mysqli系の関数では第1引数にハンドラを渡し、データベースに接続した情報を渡す形になります。

文字コードの設定

mysqli_set_charset( $db_link, 'utf8');

データの更新日、登録日を登録するために、date関数で現在の日時を取得して$dateに入れます。

現在の日時を取得

// 現在の日付を取得
$date = date('Y-m-d H:i:s');

続いて、データを登録するSQLを作成して$sqlに入れます。

SQLの作成

// INSERT
$sql = "INSERT INTO gc_granola (
	name, price, best_before, modify_datetime, create_datetime
) VALUES (
	'テストグラノーラ', 300, '2016-12-01 00:00:00', '$date', '$date'
)";

mysqli_query関数でSQLを実行してデータを登録します。

SQLを実行

$res = mysqli_query( $db_link, $sql);

$resにはデータの登録に成功したらtrue、失敗した場合はfalseが入ります。

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

実行結果を出力して終了

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

以上が関数を使った書き方でした。

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

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

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