我使用的语法如
$query = "SELECT * FROM contacts WHERE contact_id = $id";
经常有效,但往往不起作用。然后,如果我使用
$query = 'SELECT * FROM contacts WHERE contact_id = "'.$id.'";
然后它的工作原理。哪一个是正确的方法??
答案 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";