基本形
$pdo = new PDO()
でPDO
オブジェクトを得る$stmt = $pdo->prepare()
でプレースホルダー入りのSQLを準備する$stmt->bindValue()
や$stmt->bindParam()
でプレースホルダーを埋める$stmt->execute()
でバインドを有効化する
bindValueによる値の設定
'?'
によるプレースホルダー
以下の例では、prepare()
のSQL中2つの'?'
がプレースホルダーになる。
1 2 3 4 5 6 7 8 |
$pdo = new PDO($dsn, $user, $pass, $option); $stmt = $pdo->prepare('INSERT INTO test_table (num_data, str_data) VALUES (?, ?)'); $stmt->bindValue(1, 10, PDO::PARAM_INT); $stmt->bindValue(2, 'ABC', PDO::PARAM_STR); $stmt->execute(); $pdo = null; |
bindValue()
の第1引数は何番目のプレースホルダー'?'
かを指定し、第2引数にそのプレースホルダーにセットする値を指定する。第3引数は省略するとPDO::PARAM_STR
になる。
この結果、データベースのnum_data
とstr_data
にそれぞれ10
, 'ABC'
が追加される。
名前によるプレースホルダー
以下の例では、prepare()
のSQL中':num'
と':str'
の2つがプレースホルダーになる。
1 2 3 4 5 6 7 8 |
$pdo = new PDO($dsn, $user, $pass, $option); $stmt = $pdo->prepare('INSERT INTO test_table (num_data, str_data) VALUES (:num, :str)'); $stmt->bindValue(':num', 20, PDO::PARAM_INT); $stmt->bindValue(':str', 'DEF', PDO::PARAM_STR); $stmt->execute(); $pdo = null; |
bindValue()
の第1引数でそれぞれのプレースホルダーを指定し、第2引数にそのプレースホルダーにセットする値を指定する。第3引数は省略するとPDO::PARAM_STR
になる。
この結果、データベースのnum_data
とstr_data
にそれぞれ20
, 'DEF'
が追加される。
bindParamによる変数の設定
bindValue()
はプレースホルダーに値を設定したが、bindParam()
は変数を設定する。
変数がバインドされた時点ではSQLの内容は決定されていない。変数に値をセットし、execute()
を実行した段階でSQLの値が確定する。
1 2 3 4 5 6 7 8 9 10 11 |
$pdo = new PDO($dsn, $user, $pass, $option); $stmt = $pdo->prepare('INSERT INTO test_table (num_data, str_data) VALUES (:num, :str)'); $stmt->bindParam(':num', $num, PDO::PARAM_INT); $stmt->bindParam(':str', $str, PDO::PARAM_STR); $num = 30; $str = 'GHI'; $stmt->execute(); $pdo = null; |
この例では2つのプレースホルダーに変数をバインドし、その変数に値を与えてからexecute()
を実行している。プレースホルダーに'?'
を用いてもよい。
この結果、データベースのnum_data
とstr_data
にそれぞれ30
, 'GHI'
が追加される。