我有一段代码,我不断收到像以下代码的语法错误:
$query ="SELECT * from `jos_menu` where `id` = ".'\".$parent.'\";
现在当我将其重新格式化为:
$query ="SELECT * from `jos_menu` where `id` = ".$parent;
这是我删除的时间:' \" 它工作正常。所以我只是想知道,(' \" )实际上做了什么???
答案 0 :(得分:2)
\
是转义字符。这意味着下一个角色应该从字面上理解,而不关心它的特殊含义。
在PHP中,如果字符串用双引号分隔(并且开发人员只需要前面的单引号),通常会在字符串中看到'\"
。
答案 1 :(得分:1)
它表示转义的字符。在它之后出现的下一个字符将被视为其当前形式。
您的查询被错误地转义
$query ="SELECT * from `jos_menu` where `id` = ".'\".$parent.'\";
//^ You mismatched the quotes from here
正确转义的查询应为
$query ="SELECT * from `jos_menu` where `id` = \"$parent\"";
// ^ Note here " will printed as it is within the query
例如,
如果$parent
为2
,则查询为
SELECT * from `jos_menu` where `id` = "2"
答案 2 :(得分:1)
它工作正常,因为你有一个数值 - 所以mysql会自动将一个字符串转换为一个数字。所以你得到2个不同的查询(假设$parent = 42;
:
SELECT * from `jos_menu` where `id` = 42
VS
SELECT * from `jos_menu` where `id` = "42"
答案 3 :(得分:0)
一些事情:
'\''
//输出单个'
\n
换行符,\t
标签字符等答案 4 :(得分:0)
反斜杠在它之后逃脱了下一个字符;在你的例子中,这将起作用:
$query = "SELECT * from jos_menu where id = ".$parent;
但是这样:
$query = "SELECT * from jos_menu where id = $parent";
当转义引号时,它会根据使用的括号类型而有所不同。使用双括号,您可以将变量直接包含在字符串中,只需注意按键访问数组:
$var = "This \"works\" ".$fine.".";
$var = "This 'also' works just $fine.";
$var = "This $will['fail'].";
$var = "However, $this[will] work and so ".$will['this'].".";
同样的规则适用于单括号。
答案 5 :(得分:0)
唯一的问题
$query ="SELECT * from `jos_menu` where `id` = ".'\".$parent.'\";
你错过了一些'
:
$query ="SELECT * from `jos_menu` where `id` = ".'\"'.$parent.'\"';
在PHP中,字符串可以是:
$var = 'This is a string';
或者
$var = "This is a string";
如果要将"
放在已经使用"
开始的字符串中,则需要告诉PHP您不希望第二个"
结束字符串但是使用字符"
作为字符串本身的一部分。这就是\"
的作用。它告诉PHP 不要给"
字符赋予任何特殊含义;因为通常如果您使用"
启动字符串,则下一个"
将结束字符串。
\
表示删除下一个字符的任何“特殊”含义
这仅适用于\
之后的角色具有特殊含义的情况。一些例子:
假设我们要打印Hello "World". I am a string!
:
$var = "Hello "World". I am a string!";
在这个例子中,我们会有错误。由于我们使用"
启动了字符串,因此下一个"
将关闭字符串。那么PHP的想法是什么:
"
字符串开头Hello
字符串变量的一部分。"
嘿,因为我看到字符串是以"
开头的,所以这必定意味着结束了!World"
< - 错误停止处理并抛出错误。
但是,如果我们写:
$var = "Hello \"World\". I am a string!";
现在,PHP认为:
"
字符串开头Hello
字符串变量的一部分\
啊,好吧,下一个字符我应该删除任何特殊含义"
好的,这是在\
之后,所以我只是正常使用它,"
。World
字符串的一部分\
好的,下一个字符我将删除任何特殊含义"
现在这是正常的"
. I am a string!
- 字符串变量的一部分。"
啊!由于字符串是以"
开头的,因此必须是结尾。;
结束陈述。希望这能为您澄清事情。