Developer

【PHP応用】 PDO⑤ プリペアードステートメントの実行 INSERT文
2021.08.31
Lv2

【PHP応用】 PDO⑤ プリペアードステートメントの実行 INSERT文

プリペアードステートメントの、INSERT文のコードの
書き方を紹介します。

処理の流れは以下の通りです。
1.prepareメソッドでsqlを作成し、
2.プレースホルダにbindValue,bindParamで変数をセット
3.executeで実行
※最後にexecuteされて初めてSQLは実行されています。それまでは実行されていないので注意。

$sql = "insert into member (id,name,number,email) values(:name, :number, :email)";
$name = "Andrew";
$number = 1;
$email  = null;

$stmt = $dbh->prepare($sql);
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':number', $number, PDO::PARAM_INT);

$pdo_type = is_null($email) ? PDO::PARAM_NULL : PDO::PARAM_STR;
$stmt->bindValue(':email', $email, $pdo_type);
 
$result = $stmt->execute();

★$resultをechoしてみましょう。成功時は値の取得結果、
失敗時はfalseが返ります。

補足:bindValue,bindParamの違い

・bindValue:
値をバインドしたら、その時点のセットした値が使われる。
第2引数は変数でも値でも可。
・bindParam:
バインドの後でセットする変数の内容が変わったら、変更後の値が使われる。
第2引数は必ず変数でなければいけない。

補足:bindValue,bindParamの第3引数の種類

第3引数は、SQLにおけるデータ型を指定しています。

PDO::PARAM_BOOL (integer) SQLのブールデータ型を表します。
PDO::PARAM_NULL (integer) SQLのNULL データ型を表します。
PDO::PARAM_INT (integer) SQLのINTEGER データ型を表します。
PDO::PARAM_STR (integer) SQLのCHAR, VARCHAR, または他の文字列データ型を表します。

実際の使用例

実際の使用例としては、
ユーザ―視点でウェブフォームを入力し、提出すると、
裏側でプリペアードステートメント(INSERT文)が実行されます。
くわしくは、次回の記事をご覧ください。

PHPWEBプログラミング講座 連載目次リンク

PHPWEBプログラミング講座 連載目次