Mysql + php со специальными символами, такими как '(Апостроф) и " (кавычки)
Я некоторое время боролся с небольшой проблемой. Это было там в течение многих лет, но это была просто раздражающая проблема, а не серьезная, и я просто работал над этим. Но сейчас я хочу узнать, может ли кто-нибудь мне помочь. Я сделал некоторые google, но без успеха.
Если я делаю сообщение формы из HTML textarea в файле php, как это:
<form action="http://action.com" method="post">
<textarea name="text"><a href="http://google.com">google's site</a></textarea>
</form>
и, конечно, есть кнопка отправки и так далее.
значение проблема: <a href="http://google.com">google's site</a>
Значение textarea имеют как "(кавычки), так и " (Апостроф).
сохранить это в mysql_database я делаю так:
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".$_POST['text']."') ") or die(mysql_error());
и теперь я получаю ошибку mysql:
у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL для правильного синтаксиса для использования рядом с сайтом " в строке 1
6 ответов
ваша строка sql будет:
INSERT INTO `table` (`row1`) VALUES ('google's site')
что не является допустимым утверждением. Как писала Нанне, побег строки, по крайней мере, с mysql_real_escape_string:http://php.net/manual/en/function.mysql-real-escape-string.php
и почитай про SQL-инъекции http://en.wikipedia.org/wiki/SQL_injection
подумайте немного: если кто-то публикует это: $_POST['text']
стоимость: ');delete from table;....
вы можете попрощаться с вашими данными :)
всегда фильтр / escape вход!
EDIT: начиная с PHP 5.5.0 mysql_real_escape_string и расширение mysql устарели. Пожалуйста, используйте расширение mysqli и функцию mysqli:: escape_string вместо
всегда, по крайней мере, используйте mysql_real_escape_string при добавлении пользовательских значений в базу данных. Вы должны посмотреть параметры привязки или mysqli, чтобы ваш запрос стал:
INSERT INTO `table` (`row1`) VALUES (?)
и ? будет заменено фактическим значением после дезинфекции ввода.
в вашем случае:
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".mysql_real_escape_string($_POST['text'])."') ") or die(mysql_error());
чтение на SQL инъекции. Это стоит сделать как можно скорее!
Escape строка: D
http://php.net/manual/en/function.mysql-real-escape-string.php
вы можете использовать функцию addslashes (). Он цитирует строку с косыми чертами. таким образом, это будет очень полезно для вас, когда вы добавляете любой Апостроф в своей области.
$result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".addslashes($_POST['text'])."') ") or die(mysql_error());
вместо использования старых функций mysql* используйте PDO и пишите параметризованные запросы -http://php.net/pdo
Я также боролся за символы, когда я обновлял данные в mysql.
но я, наконец, пришел к лучшему ответу, вот:
$lastname = "$_POST["lastname"]"; //lastname is : O'Brian, Bran'storm
и когда вы собираетесь обновить свою базу данных, система не будет обновлять ее, если вы не используете реальную Escape-строку MySQL. Здесь:
$lastname = mysql_real_escape_string($_POST["lastname"]); // This Works Always.
тогда запрос будет обновляться, конечно.
Example: mysql_query("UPDATE client SET lastname = '$lastname' where clientID = '%"); //This will update your data and provide you with security.
для получения дополнительной информации, пожалуйста, проверьте использования mysql_real_escape_string
Надежда Это Помогает