2012-03-28 39 views
0

我有一段代码,我不断收到语法错误的代码像帖:什么是“”实际上是在PHP语法意味着

$query ="SELECT * from `jos_menu` where `id` = ".'\".$parent.'\"; 

现在,当我重新格式化为:

$query ="SELECT * from `jos_menu` where `id` = ".$parent; 

这就是当我删除:'\“ 它工作正常。所以,我只是想知道,什么是(“\”)实际做???

+0

“*使用[准备语句](http://ca2.php.net/manual/en/book.pdo.php)*”,这是一个值得一提的远处答案。 – Dan 2012-03-28 05:24:23

回答

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的想法:

  1. "开始串的字符串变量的
  2. Hello一部分。
  3. "嘿,因为我看到字符串是从"开始的,这意味着它的结束!
  4. World" < - 错误

停止处理并抛出错误。

但是,如果我们写:

$var = "Hello \"World\". I am a string!"; 

现在,PHP认为:

  1. "字符串的开始字符串变量
  2. \
  3. Hello部分,没关系,下一个我应该删除任何特殊含义的字符
  4. "好的,这是\之后,所以我只是正常使用它,作为"。串
  5. \奥凯的
  6. World部分,下一个字符我将删除任何特殊含义
  7. "现在,这是一个正常的"
  8. . I am a string! - 字符串变量的一部分。
  9. "啊!由于字符串是从"开始的,所以这必定是结局。
  10. ;结束语句。

希望能够为您澄清事情。

2

\是转义字符,这意味着下一个字符应该从字面上看,没有照顾其特殊的意义。

在PHP中,如果字符串是用双引号分隔的(并且开发人员只是想要一个前面的单引号),您通常会在字符串中看到'\"

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 

例如, 如果$parent2,那么查询将

SELECT * from `jos_menu` where `id` = "2" 
1

它工作正常,因为你有一个数字VA lue - 所以mysql会自动将字符串转换为一个数字。所以,你得到2级不同的查询(假设$parent = 42;

SELECT * from `jos_menu` where `id` = 42 

VS

SELECT * from `jos_menu` where `id` = "42" 
0

有几件事情:

  • 来表示下一个字符文字,'\'' //输出单'
  • 特殊字符,\n换行符,\t tab charact er等
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']."."; 

规则同样适用于单括号。