Intereting Posts

простая оценка php Dollar $ в строковых вопросах

Я всегда был в замешательстве, что .e, g в php i имеет оператор sql

$qry = "select * from table where id = $id"; 

теперь я могу вставить «$» прямо внутри кавычек, или я должен использовать

  $qry = "select * from table where id =".$id." "; 

или

  $qry = 'select * from table where id = $id'; 

или

  $qry = 'select * from table where id = '$id''; 

Что правильно

Solutions Collecting From Web of "простая оценка php Dollar $ в строковых вопросах"

Если строка находится в двойных кавычках, переменные будут оцениваться. Если это одинарные кавычки, это буквально, и вы получите именно то, что вы набираете.

 $bar = 42; 'Foo $bar Baz' // Foo $bar Baz "Foo $bar Baz" // Foo 42 Baz 'Foo ' . $bar . ' Baz' // Foo 42 Baz 'Foo ' . '$bar' . ' Baz' // Foo $bar Baz "$bar " . $bar . " $bar" // 42 42 42 

Вот соответствующий раздел руководства для полного объяснения:
http://php.net/manual/en/language.types.string.php#language.types.string.parsing

Чтобы поместить фактические кавычки в строку, вам нужно будет их чередовать или избежать.

 '"$bar"' // "$bar" "'$bar'" // '42' '\'$bar\'' // '$bar' "\"$bar\"" // "42" ''$bar'' // syntax error, empty string '' + $bar + empty string '' 

Кроме того, что он сказал .

Ничего из вышеперечисленного, если $id , похоже, уже сбежал от SQL. Вероятно, вы захотите использовать это, если используете MySQL:

 $qry = "select * from table where id = '".mysql_real_escape_string($id)."'"; 

Изменить: Хорошо, это было неправильно. Согласно комментарию моего ответа, это должно работать:

 $qry = "select * from table where id = ".(int)$id; 

Вы также можете попробовать явное обозначение переменных в строках следующим образом:

 $query = "SELECT * FROM table WHERE id = {$id}"; 

Это позволяет вам делать такие вещи, как:

 $name = "friend"; $str = "Hello {$name}s"; // Hello friends 

где вы не могли этого сделать, если попытались:

 $str = "Hello $names"; 

Так как он попытается расширить переменную с именем $ names.

Переменные, заключенные в одинарные кавычки, не расширяются и рассматриваются как литералы, поэтому «hey, $ id» будет именно таким, что вместо ожидаемого «эй, 1», если вы использовали двойные кавычки.

Вы также можете попробовать sprintf :

 $query = sprintf("SELECT * FROM table WHERE id = %d", $id); 

Как сказал первый плакат, определенно дезинформируйте свои данные перед запуском запросов.

И то и другое

 $qry = "select * from table where id = $id"; 

а также

 $qry = "select * from table where id = " . $id; 

будет работать и даст вам то же значение в $qry . Заметьте, что в этом нет необходимости ." " вас было в конце второго – все, что делает, добавляет пробел, что довольно бессмысленно.

Вы также можете сделать

 $qry = 'select * from table where id = ' . $id; 

Что точно так же, как два других. Они все «правильны» в том, что все они дают вам желаемый результат, и все они имеют свое место. Первый довольно неэффективен из-за того, как PHP обрабатывает интерполированные строки (см. Здесь подробное объяснение), но, возможно, он чище и быстрее, чем два других.

Я использую этот $qry = "SELECT * FROM table WHERE id=$id"; как мне кажется, INT не нуждается в котировках.

в противном случае я использую $qry = "SELECT * FROM table WHERE name='$name'"; однако $ name нужно отфильтровать …

Theres простой способ запомнить это.

Используя двойные qoutes " ваш говорящий php, эта строка должна анализироваться для переменных php.

используя петь qoutes ' ваш говорящий php, чтобы не преобразовать какие-либо переменные в значения.

Но также не делайте это при перевозках, таких как \ r и \ n, используя один qoute, carriege не принимается во внимание, и он печатает буквальный \ r или \ n, но мой, используя двойные qoutes, будет преобразован туда таких как

посмотри, что я там сделал 🙂

Надеюсь это поможет.