2
0

More than 3 years have passed since last update.

prepareメソッドを使う時にbindValueを省略する記述法があるらしい…!

Last updated at Posted at 2021-06-21

bindValueを省略しない書き方

prepareメソッドは変動値を持つSQLを実行したいときに使うメソッド。
基本的な流れは
変動値にプレースホルダーを持たせてprepareメソッドを記述
  ↓
prepareメソッドの返り値のPDOExeptionの中にあるbindValueメソッドで、
設定しているプレースホルダーに割り当てたい値、$PDOデータ型定数を設定する
  ↓
executeで実行する
  ↓
fetchで実行結果の返り値を取得

$sql = 'select * from contacts where id = :id'; 
$stmt = $pdo->prepare($sql);
$stmt->bindValue('id', 3, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchAll();

bindValueを省略する書き方

基本的な流れは
変動値にプレースホルダーを持たせてprepareメソッドを記述
  ↓
bindValueを使わない代わりに、exectueメソッドにarray型の引数をもたせる
  ↓
fetchで実行結果の返り値を取得

$params = [
 'id' => null,
 'your_name' => '追加名前4',
 'email' => 'params@udemy2.com',
 'url' => 'http://params2.com',
 'gender' => '0',
 'age' => '3',
 'contact' => 'ダミーテキスト4',
 'created_at' => null
];

$count = 0;
$colums = '';
$values = '';

foreach(array_keys($params) as $key){
  if($count++>0){
      $colums .= ',';
      $values .= ',';
  }
  $colums .= $key;
// 名前付きプレースホルダー
  $values .= ':'.$key;
}

$sql = "insert into contacts ($colums) values ($values)";
$stmt = $pdo->prepare($sql);

// bindValueを使わない代わりに、exectueメソッドにarray型の引数をもたせる
$stmt->execute($params);

/*
bindValueを省略しないバージョン
*/

// $stmt = $pdo->prepare($sql);
// $stmt->bindValue(':id',$params["id"],PDO::PARAM_INT);
// $stmt->bindValue(':your_name',$params["your_name"],PDO::PARAM_STR);
// $stmt->bindValue(':email',$params["email"],PDO::PARAM_STR);
// $stmt->bindValue(':url',$params["url"],PDO::PARAM_STR);
// $stmt->bindValue(':gender',$params["gender"],PDO::PARAM_INT);
// $stmt->bindValue(':age',$params["age"],PDO::PARAM_INT);
// $stmt->bindValue(':contact',$params["contact"],PDO::PARAM_STR);
// $stmt->bindValue(':created_at',$params["created_at"],PDO::PARAM_STR);
// $stmt->execute();


bindValueを省略しないバージョンは記述量がとてつもなく長くなる・・・
変動値が複数ある場合にはbindValueを使わない記述の方が見やすくて良い感じ!
ただ、bindValueを使わないことで$PDOデータ型変数が指定できないことがデメリットみたいだなあ :sweat_smile:

2
0
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
2
0