PHP에서 PDO의 플레이스홀더 자동 따옴표 감싸기
기술적으로 PDO는 삽입되는 모든 값을 실제로 숫자인 경우라도 문자열로 간주하여 따옴표로 감쌉니다. 이는 SQL 구문상 허용됩니다. 따라서 값이 문자열인 경우 플레이스홀더를 따옴표로 감쌀 필요가 없습니다.
예제를 통해 살펴보겠습니다. 변수에 문자열이 저장되어 있다고 가정해 봅시다:
<?php
$name = 'name1';
?>
이 경우 위치 지정 플레이스홀더를 문자열로 감쌀 필요가 없습니다:
<?php
$sql = 'SELECT * FROM users WHERE name=?';
$res = $pdo->prepare($sql);
$res->execute([$name]);
?>
명명된 플레이스홀더도 마찬가지로 문자열로 감쌀 필요가 없습니다:
<?php
$sql = 'SELECT * FROM users WHERE name=:name';
$res = $pdo->prepare($sql);
$res->execute(['name' => $name]);
?>
그러나 쿼리에서 항상 문자열이 된다는 사실은 구문상 반드시 숫자여야 하는 경우 SQL 구문 문제를 일으킬 수 있습니다. 이런 경우에는 다음 강의에서 다룰 매개변수 바인딩의 대안 방법을 사용할 수 있습니다.