我使用的语法像单引号,双引号,用PHP
$query = "SELECT * FROM contacts WHERE contact_id = $id";
往往它的工作原理,但往往不工作MySQL查询。然后,如果我使用
$query = 'SELECT * FROM contacts WHERE contact_id = "'.$id.'";
然后它工作。哪一个是正确的?
我使用的语法像单引号,双引号,用PHP
$query = "SELECT * FROM contacts WHERE contact_id = $id";
往往它的工作原理,但往往不工作MySQL查询。然后,如果我使用
$query = 'SELECT * FROM contacts WHERE contact_id = "'.$id.'";
然后它工作。哪一个是正确的?
$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";
事实上,没有这些语法的是最好的,当谈到编写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这样的解释型语言。
感谢@Spudley为您长期的答案。 我,而我用下面的语法 '$查询=收到错误“SELECT * FROM接触WHERE CONTACT_NAME = $名称”;' 如果我用下面的语法,我没有得到错误。 '$ query =“SELECT * FROM contacts WHERE contact_name ='$ name'”;' 据我所知,第一个是正确的语法。 –
好的。你得到的错误是SQL错误,而不是PHP错误。请参阅我的答案的前半部分以获得最佳解决方案。 (@ JohnWoo的答案也有一些重要提示,为什么你会犯错误,了解SQL注入的概念并知道如何避免这一点很重要) – Spudley
这意味着你在说'$ query =“SELECT * FROM contacts WHERE contact_name = $ name“;'是错误的语法,'$ query =”SELECT * FROM contacts WHERE contact_name ='$ name'“;'如果我想避免错误,则是正确的语法。 –
也看看http://stackoverflow.com/questions/3446216/difference-between-single-quote-and-double-quote-string-in-php – clentfort