【发布时间】:2012-11-11 17:48:31
【问题描述】:
当我将变量发布到数据库时,当然,我使用mysql_real_escape_string。这样特殊字符就可以正常进入数据库了。
当我从数据库中读取这个变量时,我再次使用mysql_real_escape_string和stripslashes:
$var = stripslashes(mysql_real_escape_string($record['rowname']));
否则它会在引号前给我斜杠。
当我使用上面提到的这个$var并想回显它时,我可以简单地echo "$var",因为它已经被剥离和转义了,对吧?
此外,如果我在一个变量上使用stripslashes + mysql_real_escape_string,然后在数据库中再次发布同一个变量,mysql_real_escape_string 是否足够?还是我需要再次stripslashes这个变量?
总结:
据我所知这是如何工作的:
- 使用
mysql_real_escapeEVERY 使用mysql 的数据时:通过变量读取查询,就像将变量发布到数据库一样。 - 在回显转义变量时使用
stripslashes。 - 如果您想再次将
stripslashes和转义变量发布到数据库中,则无需再次删除它。
我想念htmlspecialchars吗?
编辑
所以这一切都错了吗?
while( $record=mysql_fetch_array($result) )
{
$custid=mysql_real_escape_string($record['custid']);
$custsurname=mysql_real_escape_string($record['custsurname']);
$custmidname=mysql_real_escape_string($record['custmidname']);
$custforename=mysql_real_escape_string($record['custforename']);
$custcountry=stripslashes(mysql_real_escape_string($record['custcountry'])); }
【问题讨论】:
-
等待所有人告诉你切换到 PDO 和准备好的语句 xD,他们是对的。停止使用 mysql_,因为它已被弃用且不太安全
-
我知道 PDO 比较好,但是由于我的实践训练快结束了,只需要确保混乱,我想确保我做得很好。
-
你不应该使用 mysql_* 甚至用于训练:它已被弃用,将在未来的 PHP 版本中删除。使用 PDO 或 mysqli、prepared statements 和 filter_var 进行正确的输入检查/清理
标签: php mysql mysql-real-escape-string htmlspecialchars stripslashes