1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PDOクラスのprepareメソッドについて勉強してみた

Last updated at Posted at 2021-06-21

#PDOのprepareメソッドでSQL文を実行する手順
①DBに接続
②実行したいSQL文をprepareメソッドにセット
③bindValueメソッドを実行して、SQLにパラメーターをセット
④executeメソッドで実際にSQLを実行
⑤返り値を取得

#prepareメソッドとは
変動値を含むSQL文を実行するのに使うPDOクラス内のメソッド。
変動値を含むため、悪意のあるユーザーが変動値を入力する箇所に攻撃をしてきても大丈夫なようにSQLインジェクション対策としてプレースホルダを使って安全にSQL文を割り当てる必要がある。
プレースホルダーの書き方は、変数が入る箇所に「?」または「:(任意の名前)」をつければOK!

$sql = 'select * from contacts where id = ?';      //疑問符プレースホルダー
$sql = 'select * from contacts where id = :id'; //名前付きプレースホルダー

#bindValueメソッドとは
・・・そもそもバインドって何?
→バインド(bind)とは何かを割り当てるという意味
そのため、bindValue=割り当てられた値となるので、この場合ではbindValueは変動値のことを表す。

//名前付きプレースホルダーの場合
bindValue (指定した任意の名前(:id), 割り当てたい値 [, $PDOデータ型定数] )
//疑問符プレースホルダーの場合
bindValue (1(何個目の「?」か), 割り当てたい値 [, $PDOデータ型定数] )

$PDOデータ型定数(PHPマニュアル)
https://www.php.net/manual/ja/pdo.constants.php
デフォルト値はPDO::PARAM_STR

#executeメソッドとは
executeを直訳すると実行するという意味。
PODクラスのprepareメソッドを使ったSQLを実行するにはexecuteメソッドを使って実行する必要がある。
*queryメソッドは実行までしてくれるメソッドになるため、executeメソッドを使う必要はない!

$sql = 'select * from contacts where id = :id'; 
$stmt = $pdo->prepare($sql);
$stmt->bindValue('id', 3, PDO::PARAM_INT);
$stmt->execute();  //ここで初めてSQLが実行される

$result = $stmt->fetchAll(); //返り値を取得

#結論
変動値がある場合、prepare⇒bindValue⇒executeでSQL文が実行できる

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?