2009-02-16 105 views
0

“我使用Flash AS3,PHP和MySQL”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)工作正常。但是后者在闪存中会出错。错误消息是:“参数文本必须是非空的。”

我试过“echo”(display)都是结果,结果都是一样的。很奇怪..任何人有任何想法?

回答

3

请记住,mysql_real_escape_string()需要打开数据库连接才能正常工作;如果你在使用mysql_connect之前调用它,它不会产生预期的效果。

2

如果您想在查询中使用字符串,然后由mysql_query函数执行,则只需要mysql_real_escape_string。此外,如果您不能确保此字符串不包含某些可能违反您所要查询的完整性的字符,则只需要此函数。

+0

我确实需要使用mysql_query,因为我将变量与我的用户表值进行比较,如果它匹配,则登录成功。 – roa3 2009-02-16 10:20:13

0

第一种形式将完全按照您的想法进行:将提交的值和MD5获取到您的变量中。

如果有的话,第二种形式也会转义任何“危险”字符。尝试使用包含引号的用户名,您将获得它。

2

这样可以很清楚对方是什么答案correcty状态:

我可能被罚款使用您的第一个版本,如果你想通过这个变量闪烁。 如果你想在数据库查询中使用这个变量,那么使用你的第一个版本是不行的。

含义:

OK

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

NOT OK

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

我以为你第一次授权用户,然后将数据发送到闪存。如果是这样,似乎没有问题。对?

2

错误消息有帮助你。阅读它们。

错误消息是:“参数文本必须为非空”。

这似乎表明,无论是你的用户名或密码字符串为空(空)和mysql_real_escape_string或(更可能)您md5功能拒绝接受空字符串作为输入。首先测试一个空字符串,你应该没问题。

此外,MD5哈希仅包含字母数字字符,所有这些字符在任何地方都可以安全使用。您不需要通过mysql_real_escape_string传递它们,因为散列过程已经对输入进行了消毒。