ЗОП Не экранирование кавычек
У меня проблема в php-скрипте, где я использую PDO для доступа к своей базе данных. Я не могу заставить PDO избежать моей строки, когда я использую prepare()
или же execute()
в PDO. Я просмотрел все и не нашел ответа на эту проблему, потому что везде, где я смотрю, написано, что PDO автоматически экранирует строки. Вот мой код:
$statement = $db->prepare("INSERT INTO Table (ID, Column1, Column2) VALUES (NULL, '$var1', '$var2')");
$query->execute();
Допустим $var1 = "abc'def"
а также $var2 = "123"
Проблема в том, что я получаю сообщение об ошибке, потому что цитату не удалось избежать.
Ошибка: SQLSTATE[42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с 'def', '123')'в строке 1
Я также пытался использовать query()
метод, но тот же prpblem с кавычками. Я действительно не понимаю, и это расстраивает. Спасибо за любую помощь.
3 ответа
Попробуй это:
# Took out ID, as it should be auto_increment and handled by database
$statement = $db->prepare("INSERT INTO Table (Column1, Column2) VALUES (:col1, :col2)");
$statement->bindValue(':col1', $var1, PDO::PARAM_STR);
$statement->bindValue(':col2', $var2, PDO::PARAM_INT);
$statement->execute();
Пожалуйста, взгляните на метод bindParam() библиотеки PDO.
Это делает ваш запрос похожим на это:
$statement = $db->prepare("INSERT INTO Table (ID, Column1, Column2) VALUES (NULL, ?, ?)");
$statement->bindParam(1, $var1, PDO::PARAM_STR);
$statement->bindParam(2, $var2, PDO::PARAM_INT);
$query->execute();
// Я действительно должен загрузить новые ответы:) Когда бар говорит, что есть.