2012-03-28 4 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

ответ

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. Hello часть строки переменной
  3. \ Ах, хорошо, следующий характер я должен удалить любое специальное значение
  4. " Хорошо, это сразу после \, поэтому я просто использую его как правило, как ".
  5. World часть строки
  6. \ Ладно, следующий символ удалит специальное значение
  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 

Например, Если $parent был 2, то запрос будет

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

Он отлично работает, потому что у вас есть числовое значение va lue - так mysql автоматически преобразует строку в число для вас. Таким образом, вы получите 2 различных запросов (при условии, что $parent = 42;:

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

против

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

Несколько вещей:

  • Для обозначения следующего символа буквального '\'' // выводит один '
  • Специальные символы, \n newline, \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']."."; 

Тех же правила применяются для одной скобки.