ЗОП Не экранирование кавычек

У меня проблема в 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();

// Я действительно должен загрузить новые ответы:) Когда бар говорит, что есть.

Для этого есть функция. Посмотрите на www.php.net/addslashes

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