PHPのPDOにおけるプレースホルダーの自動引用符囲い
技術的には、PDOは挿入されるすべての値を 実際には数値であっても文字列とみなして 引用符で囲みます。 これはSQLの構文的に許容されています。 したがって、値が文字列である場合は、 プレースホルダーを引用符で囲む必要はありません。
例を見てみましょう。 変数に文字列が格納されているとします:
<?php
$name = 'name1';
?>
この場合、位置指定プレースホルダーを 引用符で囲む必要はありません:
<?php
$sql = 'SELECT * FROM users WHERE name=?';
$res = $pdo->prepare();
$res->execute([$name]);
?>
名前付きプレースホルダーも同様に 引用符で囲む必要はありません:
<?php
$sql = 'SELECT * FROM users WHERE name=:name';
$res = $pdo->prepare();
$res->execute(['name' => $name]);
?>
ただし、クエリ内の値が常に文字列として扱われることは、 構文的に数値が必須である場合に SQL構文の問題を引き起こす可能性があります。 そのような場合は、代替のパラメータバインディング方法を 利用することができ、それについては今後のレッスンで説明します。