Sha*_*ock 5 php mysql mysql-real-escape-string stripslashes
我让用户输入他们的名字,如:O'riley.
在我将这些数据输入MySQL DB之前,我运行了mysql_real_escape_string.
问题是,当我选择此数据进行显示并稍后使用时,它会显示为:O\'riley.
显然,这是预期的操作.我想知道的是,如果有一点可以肯定我可以将它存储在数据库中(仍然安全地逃避可能的恶意代码),这样我就不必strip_slashes()在输出上使用每次我在整个网络中调用数据应用程序吗?或者,我在这里错过了一些东西吗?
谢谢.
更新 请参阅Deceze答案中的评论.
dec*_*eze 10
不,这不是将字符串存储为"O \'riley" 的预期操作; 它应该只在查询中转义,但不以这种方式存储.我猜想PHP会通过Magic Quotes进行反斜杠,你再次逃脱它以使其坚持下去.
Sha*_*ock -1
谢谢大家的回答。我将奖励+50,但我想在这里告诉我真正的解决方案,所有这些都得到了人们的帮助......
mysql_real_escape_string我在所有数据发布后立即对其进行执行(在任何处理之前)。因此,添加了斜杠来转义'所提交的字符。我们知道这是正常的。
但是,反斜杠没有理由\出现在数据库条目中,对吧?逃生通道的存在是为了确保有人'进入。
事实证明,在转义之后,我将保存要重新加载到会话中页面的变量,以防用户在验证所有表单字段时 PHP 发现错误。在这种情况下,用户的输入(以前现在O'riley作为 打印到屏幕上O\'riley。然后,用户没有捕获到这一点 - 因此他们通常会修复 PHP 在验证期间捕获的错误(与名称字段无关),因此会O\'riley进入数据库,因为mysql_real_escape_string会转义字符,因此会
课程:处理表单时,首先保存数据以供表单重新填写使用。其次验证表单字段。第三,将数据转义到数据库中进行处理。
或者更好的是,使用 PDO 并避免这种情况 =)。
欢迎评论。谢谢大家!
| 归档时间: |
|
| 查看次数: |
1413 次 |
| 最近记录: |