Экранирование значений в выражениях 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 вообще не может избежать побега. Весь смысл в том, чтобы использовать связанные параметры, поэтому не нужно экранировать символы.