单引号,双引号和PHP的Mysql查询

时间:2012-10-21 10:40:52

标签: php mysql sql

我使用的语法如

$query  = "SELECT * FROM contacts WHERE contact_id = $id";

经常有效,但往往不起作用。然后,如果我使用

$query  = 'SELECT * FROM contacts WHERE contact_id = "'.$id.'";

然后它的工作原理。哪一个是正确的方法??

2 个答案:

答案 0 :(得分:2)

事实上,在编写SQL查询时, 这些语法都不是

如果您正在编写SQL查询,那么最好不要使用参数化查询来编写它,如下所示:

$query = 'SELECT * FROM contacts WHERE contact_id = ?';
$prep = $mysqli->prepare($query);  //prepares the query for action
$prep->bind_param("i", $id);       //inserts the $id variable into the '?' as an integer value.

...或使用PDO库的类似方法。

以这种方式进行查询将使您的查询更安全。

请注意,如果您使用的是旧式mysql_xx()函数(不支持此类代码),则这些函数将被视为过时且不安全,并将从未来的PHP版本中删除。你应该尽快停止使用它们。 (有关详细信息,请参阅PHP手册)

从问题中不清楚您是否询问字符串语法或查询写作风格。以上内容有助于查询编写,也避免了字符串语法的问题,但如果您仍想了解字符串语法问题,我将继续对该主题进行一些思考....

两种语法都完全有效。简短的回答是,无论哪种方式都很好,所以在任何给定的代码中,无论哪种方式最适合您。

您提到您的第一个语法“通常不起作用”。如果您可以详细说明这一点会很有帮助,因为它是完全有效的PHP语法。

它可能失败的原因是,如果你有其他单词加入变量名,那么PHP,或者如果你试图使用数组元素作为变量。在这种情况下,您应该将变量名称包装在大括号中,如下所示:

$string = "this is a string with a {$variable} in it";

事实上,这适用于所有情况(当你在字符串中使用变量时也有助于使它更清晰),所以最好一直这样做。

有些人会说使用单引号更有利于提高性能。它是....但差异很小,事实上,当你连接很多变量时,它变得更少。说实话,如果他们担心性能,这种事情对他们来说是一个问题,那么他们不应该使用像PHP这样的解释性语言。

答案 1 :(得分:1)

$query  = "SELECT * FROM contacts WHERE contact_id = '". $id . "'";

但查询容易被SQL Injection攻击。这是一篇如何保护代码免受SQL Injection

保护的文章

Best way to prevent SQL injection in PHP?

如果您要过滤的列不是数字,则下面的查询将无效。

$query  = "SELECT * FROM tableName WHERE username = $name";