我一直很困惑.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'';
哪个是正确的
答案 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,如
看看我在那里做了什么:)
希望这有帮助。