(PHP / MYSQL) mysql_real_escape_string не работает

#php #mysql #flash #mysql-real-escape-string #insert-into

#php #mysql #flash #mysql-реальная escape-строка #вставить в

Вопрос:

Недавно у меня возникла проблема с тем, что вставка В не работает должным образом при вставке определенных строк. Я обнаружил, что причиной была строка, содержащая апострофы, которые мешали моему коду. Чтобы решить эту проблему, я пытался использовать mysql_real_escape_string() , но это ничего не даст. Я читал, что предполагается вставлять перед каждым «опасным» специальным символом, но когда я повторяю результат mysql_real_escape_string() , он показывает мне ту же строку до и после, без s. Как мне это исправить? Вот мой код…

 <?php 

include "connect.php";  //connect.php connects to the database.

mysql_real_escape_string($_POST['username']);
mysql_real_escape_string($_POST['password']);
mysql_real_escape_string($_POST['sdNamer']);
mysql_real_escape_string($_POST['sdTrunk']);
//$_POST['username'] and the rest is the data entered by the user. 
$username = $_POST['username'];
$password = $_POST['password'];
$sdName = $_POST['sdNamer'];
$sdTrunkest = $_POST['sdTrunk'];

$sql = "INSERT INTO users (username, password, user_bio, starterDeck, Trunk) VALUES ('$username', '$password', 'User', '$sdName', '$sdTrunkest')";
//INSERT INTO won't work, because $sdTrunkest has string that contains an apostrophe, and mysql_real_escape_string isn't doing anything about it.
mysql_query($sql); 
exit("result_message=Success");
?>
  

Комментарии:

1. Присвоите переменной возвращаемое значение mysql_escape_string … И используйте mysqli …

2. mysql_real_escape_string($_POST[...]); куда?

3. Поскольку ваш код в данный момент написан, вы просто вызываете mysql_real_escape_string() несколько раз перед присвоением значений переменной. Сначала назначьте $_POST значения отдельным переменным и примените mysql_real_escape_string() вот так (для каждой из них): $foo = mysql_real_escape_string($foo); . А еще лучше, прекратите использовать устаревший mysql_* API и переключитесь на PDO или MySQLi.

Ответ №1:

mysql_real_escape_string() возвращает измененную строку, но вы ничего не делаете с этой строкой. Вы, по сути, не используете mysql_real_escape_string() . Используйте возвращаемое значение вместо исходного неизмененного значения:

 $username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
// etc...
  

Кроме того, в качестве дополнительного примечания, есть еще две серьезные проблемы с вашим кодом:

  1. Больше не используйте mysql_* функции. Обновите свой код. (Прочтите введение здесь, чтобы начать.)
  2. Вы храните пароли в обычном формате next. Никогда не храните пароли в виде обычного текста.

Комментарии:

1. Спасибо, я думал, что когда mysql_real_escape_string используется, он фактически редактирует цель между скобками. И о #2… Как я должен их хранить? Извините, я абсолютно новичок в PHP и Mysql.

2. @user3722253: Вы должны хэшировать пароль. Чтобы много почитать по этому вопросу, взгляните сюда: crackstation.net/hashing-security.htm . По сути, цель состоит в том, чтобы пароль был введен через односторонний хэш сразу после его получения на сервере (чтобы он также не отображался в других условиях ошибки). Важно, чтобы это было односторонним, чтобы исходный пароль никогда не мог быть прочитан, только его результирующая хэш-строка. Чтобы сравнить пароли, вы должны хэшировать предоставленный пароль и сравнивать его с сохраненным хэшем. Вы никогда не сможете прочитать пароль пользователя.