#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...
Кроме того, в качестве дополнительного примечания, есть еще две серьезные проблемы с вашим кодом:
- Больше не используйте
mysql_*
функции. Обновите свой код. (Прочтите введение здесь, чтобы начать.) - Вы храните пароли в обычном формате next. Никогда не храните пароли в виде обычного текста.
Комментарии:
1. Спасибо, я думал, что когда
mysql_real_escape_string
используется, он фактически редактирует цель между скобками. И о #2… Как я должен их хранить? Извините, я абсолютно новичок в PHP и Mysql.2. @user3722253: Вы должны хэшировать пароль. Чтобы много почитать по этому вопросу, взгляните сюда: crackstation.net/hashing-security.htm . По сути, цель состоит в том, чтобы пароль был введен через односторонний хэш сразу после его получения на сервере (чтобы он также не отображался в других условиях ошибки). Важно, чтобы это было односторонним, чтобы исходный пароль никогда не мог быть прочитан, только его результирующая хэш-строка. Чтобы сравнить пароли, вы должны хэшировать предоставленный пароль и сравнивать его с сохраненным хэшем. Вы никогда не сможете прочитать пароль пользователя.