Мой вопрос: как вы разрешаете одиночные кавычки в строках?
Например, у меня есть форма и текстовое поле. Он настроен так, чтобы пользователь мог ввести свое имя. Оттуда он отправляет и передает данные в базу данных.
Мне нужно иметь возможность разрешать одинарные кавычки (апостроф), поскольку имена некоторых людей имеют апостроф в их именах, например «O'Reilly».
Какие-либо предложения?
Одиночные кавычки никоим образом не запрещены. Я просто предполагаю, что вы получили ошибку, вставив ее в базу данных. Вероятно, это связано с отсутствием mysql_real_escape_string()
для входных значений.
Вы получите ошибку SQL, если вы попробуете INSERT ... ('O'Reilly')
что является целым рядом функций экранирования SQL.
(Вот почему
magic_quotes
изначально были введены: чтобы заставить SQL работать из коробки для новичков. – Не делать этого особенно безопасным.)
Используйте функцию mysql_real_escape_string () для любого текста, который вы вставляете в свою базу данных. Вы можете получить сообщение об ошибке в своем скрипте, если вы отправляете данные непосредственно в свою базу данных, потому что то, что вы на самом деле делаете, заканчивается цитатой MySQL.
Это также является необходимостью безопасности, что вы избегаете своих данных. Что-то вроде следующего:
$q = "INSERT INTO `table` (`body`) VALUES ('".mysql_real_escape_string($_POST['body'])."')";
Если я правильно читаю ваш вопрос, вы закодировали ошибку SQL Injection в своей программе, позволяя слегка злонамеренным людям и вирусам читать и писать вашу базу данных. (Представьте, что кто-то печатает на машинке ';drop table users;
в поле … прощайте данные.)
Самый простой способ борьбы с атаками SQL Injection – написать ваши SQL-запросы с помощью подготовленных операторов , которые просят библиотеки баз данных безопасно обрабатывать входные данные:
<?php $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)"); $stmt->bindParam(':name', $name); $stmt->bindParam(':value', $value); // insert one row $name = 'one'; $value = 1; $stmt->execute(); // insert another row with different values $name = 'two'; $value = 2; $stmt->execute(); ?>
USe like:- insert into question(question,points,choice1,choice2, choice3,choice4,choice3_correct,tags,error_status, base_or_derived,language) values('".mysql_real_escape_string($result4)."', '".$points."','".$ans1."','".$ans2."', '".$correct_ans."','".$ans3."','1','".$tags."', '".$error."','D','".$language."')