Я всегда был в замешательстве, что .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'';
Что правильно
Если строка находится в двойных кавычках, переменные будут оцениваться. Если это одинарные кавычки, это буквально, и вы получите именно то, что вы набираете.
$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, будет преобразован туда таких как
посмотри, что я там сделал 🙂
Надеюсь это поможет.