Экранирование значений в выражениях PDO

Не prepare() избежать любого quotes(') в заявлении PDO? По какой-то причине, когда я делаю это:

$sql = "INSERT INTO sessions (id, name) VALUES (1,'O'brian')";
$query = $this->connection->prepare($sql);
$query->execute();

Я получаю эту ошибку:

Could not insert record SQLSTATE[42000]: [Microsoft][SQL Server Native Client 10.0][SQL Server]Incorrect syntax near 'brian'.

Как это может быть, если я использую prepare()?

2 ответа

Решение

Поскольку вы не передаете значение в методе execute, оно не будет автоматически экранировано для вас. Следующее будет спасено для вас:

$sql = "INSERT INTO sessions (id, name) VALUES (1, ?)";
$query = $this->connection->prepare($sql);
$query->execute(array("O'brian"));

Разве prepare() не экранирует кавычки (') в выражении PDO?

Нет. Фактически, PDO вообще не может избежать побега. Весь смысл в том, чтобы использовать связанные параметры, поэтому не нужно экранировать символы.

Другие вопросы по тегам