2012-03-28 108 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']."."; 

規則同樣適用於單括號。