【MySQL】プリペアドステートメントでテーブルを作成し、値を挿入する方法
プリペアドステートメントとは
MySQLのプリペアドステートメント(準備済みステートメント)は、SQL文を事前にサーバー側で準備しておき、後からパラメータを渡して繰り返し実行できる便利な機能です。テーブルの作成やデータの挿入といった操作も、この仕組みを使って実行できます。ここでは、実際の例をもとにその手順を見ていきましょう。
プリペアドステートメントでテーブルを作成する
まず、PREPARE文で「CREATE TABLE」ステートメントを準備し、「Student」という名前のテーブルを作成します。
mysql> PREPARE stmt3 FROM 'CREATE TABLE Student(Id INT, Name Varchar(20))'; Query OK, 0 rows affected (0.00 sec) Statement prepared mysql> EXECUTE stmt3; Query OK, 0 rows affected (0.73 sec) mysql> DEALLOCATE PREPARE stmt3; Query OK, 0 rows affected (0.00 sec)
処理の流れは以下の3ステップです。
- PREPARE:SQL文をコンパイルし、サーバー内に「stmt3」という名前で保持します。
- EXECUTE:準備済みのステートメントを実行して、テーブルを実際に作成します。
- DEALLOCATE PREPARE:使い終わったステートメントを解放します。
プリペアドステートメントで値を挿入する
続いて、プレースホルダ「?」を含んだINSERT文を準備し、ユーザー定義変数(@A、@B)に値を設定しながら、複数行のデータを「Student」テーブルへ挿入していきます。
mysql> PREPARE stmt7 FROM 'INSERT INTO Student(Id,Name) values(?,?)'; Query OK, 0 rows affected (0.00 sec) Statement prepared mysql> SET @A = 1, @B = 'Ram'; Query OK, 0 rows affected (0.00 sec) mysql> EXECUTE stmt7 USING @A, @B; Query OK, 1 row affected (0.04 sec) mysql> SET @A = 2, @B = 'Shyam'; Query OK, 0 rows affected (0.00 sec) mysql> EXECUTE stmt7 USING @A, @B; Query OK, 1 row affected (0.08 sec) mysql> SET @A = 3, @B = 'Mohan'; Query OK, 0 rows affected (0.00 sec) mysql> EXECUTE stmt7 USING @A, @B; Query OK, 1 row affected (0.08 sec)
EXECUTE文の後にUSING句を付けると、指定した変数の値がプレースホルダに順番にバインドされます。一度PREPAREしたステートメントを使い回せるため、複数行の挿入を効率的に行えるのが大きなメリットです。
挿入結果の確認
最後にSELECT文でテーブルの中身を確認すると、3件のデータが正しく登録されていることがわかります。
mysql> SELECT * FROM Student; +------+-------+ | Id | Name | +------+-------+ | 1 | Ram | | 2 | Shyam | | 3 | Mohan | +------+-------+ 3 rows in set (0.00 sec)
このように、プリペアドステートメントを活用すれば、テーブル作成からデータ挿入までを柔軟かつ安全に実行できます。特に同じSQLを異なるパラメータで繰り返し実行したい場合に有効な手法なので、ぜひ覚えておきましょう。
-
PHPスクリプトでMySQLテーブルのNULL値を処理するにはどうすればよいですか?
NULL値に応じたクエリの組み立て方PHPスクリプトでは、if...else条件文を活用することで、NULL値の有無に応じたSQLクエリを動的に作成できます。NULLは通常の比較演算子(= など)では判定できないため、変数に値が設定されているかを事前にチェックし、NULLの場合はIS NULLを使用したクエリへ切り替えるのがポイントです。サンプルデータここでは、次のデータを持つテーブルtcount_tblを例に説明します。mysql> SELECT * from tcount_tbl;+-----------------+----------------+| tutorial_autho
-
MySQLで特定の3つの値しか格納できないカラムを持つテーブルを作成する方法
MySQLで、あらかじめ決められた3つの値だけを格納できるカラムを持つテーブルを作成したい場合は、ENUMデータ型を使用します。ENUM型を使うと、指定した候補値以外のデータが挿入されるのを防ぐことができます。テーブルの作成まず、ENUM型のカラムを持つテーブルを作成しましょう。ここでは例として、「RED」「GREEN」「BLUE」の3色のみを許可するColorカラムを定義します。mysql> create table DemoTable838(Color ENUM(RED,GREEN,BLUE)); Query OK, 0 rows affected (0.67 sec)これで、Col