Mysql + php со специальными символами типа «(Апостроф)» и «(котировочная метка)

Некоторое время я боролся с небольшой проблемой. Он был там годами, но это была просто раздражающая проблема, а не серьезная, и я только что обошелся. Но теперь я хочу узнать, может ли кто-нибудь помочь мне. Я сделал некоторые google'ing, но не успел.

Если я делаю сообщение формы из 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> В значении текстового поля есть как («Котировочная метка»), так и «(Apostrophe).

Чтобы сохранить это в mysql_database, я делаю это:

 $result = mysql_query("INSERT INTO `table` (`row1`) VALUES ('".$_POST['text']."') ") or die(mysql_error()); 

И теперь я получаю ошибку mysql:

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с сайтом '' в строке 1

Ваша строка 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;....

Вы можете прощаться с вашими данными 🙂

Всегда фильтровать / убирать вход!

EDIT: Начиная с PHP 5.5.0 mysql_real_escape_string и расширение mysql устарели. Вместо этого используйте mysqli extension и 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 Injection. Стоит делать правильно как можно скорее!

вы можете использовать функцию addslashes (). Это строка Quote с косой чертой. поэтому, это будет очень полезно для вас, когда вы добавляете какой-либо апостроф в свою область.

 $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 

И когда вы собираетесь обновлять свою базу данных, система не будет обновлять ее, если вы не используете MySQL REAL Escape String. Вот:

 $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

Надеюсь это поможет