在字符串问题中简单的php Dollar $评价

时间:2010-06-07 01:12:00

标签: php

我一直很困惑.e,g在php中我有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'';

哪个是正确的

6 个答案:

答案 0 :(得分:4)

以上都不是,除非$id恰好是SQL转义。假设你正在使用MySQL,你可能想要使用它:

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

编辑:好的,这是不正确的。根据我的回答评论,这应该有效:

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

答案 1 :(得分:4)

如果字符串是双引号,则将评估变量。如果它是单引号,它是字面的,你将得到你输入的内容。

$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 ''

另外,what he said

答案 2 :(得分:2)

您还可以在字符串中尝试显式变量表示,如下所示:

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

这允许你做以下的事情:

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

如果您尝试过,则无法执行此操作:

$str = "Hello $names";

因为它会尝试扩展名为$ names的变量。

用单引号括起来的变量不会被扩展并被视为文字,所以'嘿,$ id'就是那个,而不是'hey,1',如果你使用双引号的话。

您还可以尝试sprintf

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

正如第一张海报所说,在查询运行之前,绝对要清理数据。

答案 3 :(得分:0)

两个

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

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

会有效,并会在$qry中为您提供相同的价值。请注意,您不需要在第二秒结束时使用." " - 所有这一切都会附加一个空格,这是毫无意义的。

您也可以

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

与其他两个完全相同。他们都“正确”,因为他们都给你想要的结果,他们都有自己的位置。第一个是非常低效的,因为PHP处理插值字符串的方式(请参阅here进行深入解释),但可以说比其他两个更清晰,更快。

答案 4 :(得分:0)

我正在使用此$qry = "SELECT * FROM table WHERE id=$id";因为我认为INT不需要引号。

否则我使用的是$qry = "SELECT * FROM table WHERE name='$name'";,但需要过滤$ name ...

答案 5 :(得分:0)

Theres是一种记住这一点的简单方法。

通过使用双qoutes "告诉php该字符串应该被解析为php变量。

使用sing qoutes '告诉php不要将任何变量转换为值。

但也不要选择\ r和\ n等车厢 通过使用单个qoute不考虑carriege它将打印文字\ r或\ n,但我使用双qoutes将转换为实际的entites,如

看看我在那里做了什么:)

希望这有帮助。