php - PHP单引号、双引号和Mysql查询

标签 php mysql sql

我正在使用类似

的语法
$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/

相关文章:

php - 在 PHP 中调用 Feedburner Ping URL

php - Mysql连接4个表并获取总和

java - 在 Spring Data Jpa 中使用 JPQL 加入查询

php - 按sql查询分组

mysql - 具有可变条件的 SQL

php - Joomla 网站抛出错误

php - 动态单选按钮错误

MySql排序工作异常

SQL Server 2012 : How to script all database stored procedures into separate . SQL 文件?

php - session 不会在 5 秒内超时