Php Mysql实转义字符串和普通字符串

Php Mysql实转义字符串和普通字符串,php,flash,actionscript-3,variables,Php,Flash,Actionscript 3,Variables,“我正在使用flash as3、php和mysql” 以下两者之间的区别是什么: $username = $_POST['username']; $password = md5( $_POST['password']); 及 我正在从FlashAS3向php发送和检索变量,然后再返回AS3。前一个(没有mysql\u real\u escape\u字符串)工作正常。但后者在flash中出现错误。错误消息是:“参数文本必须为非空。” 我尝试了“echo”(显示)两种结果,结果是一样的。

“我正在使用flash as3、php和mysql”

以下两者之间的区别是什么:

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

我正在从FlashAS3向php发送和检索变量,然后再返回AS3。前一个(没有mysql\u real\u escape\u字符串)工作正常。但后者在flash中出现错误。错误消息是:“参数文本必须为非空。”


我尝试了“echo”(显示)两种结果,结果是一样的。很奇怪。。有人知道吗?

如果您想在查询中使用字符串,然后由
mysql\u query
函数执行,您只需要
mysql\u real\u escape\u string
。此外,如果您不能确保此字符串不包含可能破坏所需查询完整性的某些字符,则只需使用此函数。

第一个表单将完全按照您的想法执行:将提交的值和MD5放入变量中


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

为了更清楚地了解其他答案的正确状态:

如果您想将此变量传递给flash,我可以使用您的第一个版本。 如果要在数据库查询中使用此变量,则使用第一个版本是不合适的

意思是:

正常

<param name="FlashVars" 
value="vGetData=./your/path/yourData.php?params=<?php echo $username; ?>" />
$query = "SELECT something FROM users WHERE username=".$username;

我假设您首先授权用户,然后将数据发送到闪存。如果是这样的话,似乎没有问题。对吗?

错误消息可以帮助您。读它们

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

这似乎表明您的用户名或密码字符串为null(空)和
mysql\u real\u escape\u string
,或者(更可能)您的
md5
函数拒绝接受null字符串作为输入。首先测试一个空字符串,您应该不会有问题


此外,MD5散列只包含字母数字字符,几乎在任何地方都可以安全使用。您不需要通过
mysql\u real\u escape\u string
传递它们,因为散列过程已经对输入进行了清理。

请记住,mysql\u real\u escape\u string()需要一个开放的数据库连接才能正常工作;如果您在使用mysql\u connect之前调用它,则不会产生预期效果。

我确实需要使用mysql\u query,因为我正在将变量与我的用户表值进行比较,如果匹配,则登录成功。但您只需要将其用于mysql查询,而不需要其他任何操作。如果要在其他上下文中使用相同的值,可能需要其他函数。例如,对于HTML,您应该使用带有ENT_引号的htmlspecialchars()。
$query = "SELECT something FROM users WHERE username=".$username;