Mysql Real Escape String и обычная строка - PullRequest
0 голосов
/ 16 февраля 2009

«Я использую flash as3, php и mysql»

В чем разница между:

$username =      $_POST['username'];
$password = md5( $_POST['password']);

и

$username = mysql_real_escape_string(     $_POST['username']);
$password = mysql_real_escape_string(md5( $_POST['password']));

Я отправляю и получаю переменные из флэш-памяти AS3 в php и снова в AS3. Первый (без mysql_real_escape_string) работает нормально. Но позже появляется ошибка во вспышке. Сообщение об ошибке: «Текст параметра должен быть ненулевым.»

Я пробовал "эхо" (отображать) оба результата, результаты совпадают. Очень странно .. У кого-нибудь есть идеи?

Ответы [ 5 ]

3 голосов
/ 17 февраля 2009

Помните, что для правильной работы mysql_real_escape_string () требуется открытое соединение с базой данных; если вы вызываете его перед использованием mysql_connect, это не даст желаемого эффекта.

2 голосов
/ 16 февраля 2009

Сообщения об ошибках помогут вам. Прочитайте их.

Сообщение об ошибке: «Текст параметра должен быть ненулевым.»

Это может указывать на то, что либо ваше имя пользователя, либо строка пароля имеет значение null (пусто) и mysql_real_escape_string или (что более вероятно) ваша функция md5 отказывается принимать пустые строки в качестве входных данных. Сначала проверьте нулевую строку, и все будет в порядке.

Кроме того, хеши MD5 содержат только буквенно-цифровые символы, которые можно использовать практически везде. Вам не нужно пропускать их через mysql_real_escape_string, потому что процесс хеширования уже очистит входные данные.

2 голосов
/ 16 февраля 2009

Чтобы было яснее, что другие ответы правильно утверждают:

Я могу использовать вашу первую версию, если вы хотите передать эту переменную во флэш-память. НЕЛЬЗЯ использовать вашу первую версию, если вы хотите использовать эту переменную в запросе к базе данных.

Значение:

OK

<param name="FlashVars" 
value="vGetData=./your/path/yourData.php?params=<?php echo $username; ?>" />

НЕ ОК

$query = "SELECT something FROM users WHERE username=".$username;

Я предполагаю, что вы сначала авторизуете пользователя, а затем отправляете данные на флэш-память. Если так, то, похоже, проблемы нет. Верно?

2 голосов
/ 16 февраля 2009

Вам просто нужен mysql_real_escape_string, если вы хотите использовать строку в запросе, который затем выполняется функцией mysql_query. И, кроме того, вам просто нужна эта функция, если вы не можете гарантировать, что эта строка не содержит определенных символов, которые могут нарушить целостность запроса, который вы намеревались.

0 голосов
/ 16 февраля 2009

Первая форма будет делать именно то, что вы думаете: получите отправленные значения и MD5 в ваши переменные.

Вторая форма также избегает любых «опасных» символов, если они есть. Попробуйте это с именем пользователя, содержащим кавычки, и вы получите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...