PHPのPDOにおけるプレースホルダーの自動引用符囲い

技術的には、PDOは挿入されるすべての値を 実際には数値であっても文字列とみなして 引用符で囲みます。 これはSQLの構文的に許容されています。 したがって、値が文字列である場合は、 プレースホルダーを引用符で囲む必要はありません。

例を見てみましょう。 変数に文字列が格納されているとします:

php<?php
  $name = 'name1';
?>

この場合、位置指定プレースホルダーを 引用符で囲む必要はありません:

php<?php
  $sql = 'SELECT * FROM users WHERE name=?';
  $res = $pdo->prepare();
  $res->execute([$name]);
?>

名前付きプレースホルダーも同様に 引用符で囲む必要はありません:

php<?php
  $sql = 'SELECT * FROM users WHERE name=:name';
  $res = $pdo->prepare();
  $res->execute(['name' => $name]);
?>

ただし、クエリ内の値が常に文字列として扱われることは、 構文的に数値が必須である場合に SQL構文の問題を引き起こす可能性があります。 そのような場合は、代替のパラメータバインディング方法を 利用することができ、それについては今後のレッスンで説明します。