我正在使用类似
的语法$query = "SELECT * FROM contacts WHERE contact_id = $id";
经常有效,但经常无效。那么如果我使用
$query = 'SELECT * FROM contacts WHERE contact_id = "'.$id.'";
然后就可以了。哪一个是正确的方法??
最佳答案
事实上,在编写 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 这样的解释型语言。
关于php - PHP单引号、双引号和Mysql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997094/