我正在阅读 Does $_SESSION['username'] need to be escaped before getting into an SQL query?它说“您需要转义传递给 sql 查询的每个字符串,无论其来源如何”。现在我知道这样的事情真的很基本。谷歌搜索出现了超过 20,000 个结果。仅 Stackoverflow 就有 20 页的结果,但没有人真正解释什么是转义字符串或如何进行转义。这只是假设。你能帮助我吗?我想学习,因为我一如既往地使用 PHP 制作 Web 应用程序。
我看过: Inserting Escape Characters , What are all the escape characters in Java? , Cant escape a string with addcslashes() , Escape character , what does mysql_real_escape_string() really do? , How can i escape double quotes from a string in php? , MySQL_real_escape_string not adding slashes? , remove escape sequences from string in php我可以继续,但我相信你明白这一点。这不是懒惰。
最佳答案
转义字符串意味着减少该字符串中使用的引号(和其他字符)中的歧义。例如,在定义字符串时,通常用双引号或单引号将其括起来:
"Hello World."
但是如果我的字符串中有双引号呢?
"Hello "World.""
现在我有歧义 - 解释器不知道我的字符串在哪里结束。如果我想保留我的双引号,我有几个选择。我可以在我的字符串周围使用单引号:
'Hello "World."'
或者我可以逃避我的报价:
"Hello \"World.\""
任何以斜线开头的引号都被转义,并被理解为字符串值的一部分。
当涉及到查询时,MySQL 会监视某些关键字,我们不能在查询中使用这些关键字,否则会造成一些困惑。假设我们有一个值表,其中一列名为“Select”,我们想选择它:
SELECT select FROM myTable
我们现在在查询中引入了一些歧义。在我们的查询中,我们可以通过使用反引号来减少这种歧义:
SELECT `select` FROM myTable
这消除了我们在选择字段名称时使用错误判断引入的困惑。
只需通过 mysql_real_escape_string()
传递您的值即可为您处理很多问题。 .在下面的示例中,您可以看到我们通过此函数传递用户提交的数据,以确保它不会对我们的查询造成任何问题:
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
还有其他方法可用于转义字符串,例如 add_slashes
、addcslashes
、quotemeta
等,但您会发现当目标是运行一个安全的查询,大部分开发人员更喜欢 mysql_real_escape_string
或 pg_escape_string
(在 PostgreSQL 的上下文中。
关于php - 转义字符串是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10646142/