使用'在SQL语句中

时间:2015-03-28 16:25:50

标签: php mysql sql

我正在做一些PHP; 我发现以下代码可以正常工作

function get_total_urls() {    
    $total = mysql_query('SELECT COUNT(`url_key`) FROM `urls`');
    return (int)mysql_result($total, 0);
}
get_total_urls();

但以下代码显示警告

function get_total_urls() {    
    $total = mysql_query("SELECT COUNT('url_key') FROM 'urls'");
    return (int)mysql_result($total, 0);
}
get_total_urls();

显示以下警告:

警告:mysql_num_rows()期望参数1为资源,给定布尔值。

请帮忙;为什么第二个代码显示警告但第一个代码没问题?第二个代码无法从数据库表中获取'url_key'的计数。


无论如何都要编写第一个没有反向标记的代码,它会完美运行吗?

2 个答案:

答案 0 :(得分:4)

这是你的陈述:

$total = mysql_query('SELECT COUNT(`url_key`) FROM `urls`');

在MySQL中,反引号用于分隔标识符 - 当它们与保留字冲突或包含不合时宜的字符(例如空格,句点,逗号等)时。因为最好使标识符不与保留字冲突并且不包含不合适的字符,所以很少需要反引号。

你可以写:

$total = mysql_query('SELECT COUNT(url_key) FROM urls');

单引号应用于字符串和日期常量。不要将它们用于标识符,它们只会导致混淆。毫无疑问,你已经注意到了。

答案 1 :(得分:2)

两个代码都不同。

Backticks将用于表和列标识符,

与你的例子相同;其中url_key是列名,urls是table_name。

$total = mysql_query('SELECT COUNT(`url_key`) FROM `urls`');

Backticks仅在标识符为MySQL reserved keyword时,或者当标识符包含空格字符或超出限制集的字符时才需要。

通常建议尽可能避免使用保留关键字作为列或表标识符,避免引用问题。

'单引号' 应该用于字符串值,例如插入语句中的VALUES()列表。

例如:

$query = "INSERT INTO `table` (`id`, `col1`, `col2`, `date_field`) VALUES (NULL, 'val1', 'val2', '2015-01-28')";

MySQL还希望将DATEDATETIME字面值作为'2001-01-01 00:00:00'等字符串单引号

MySQL也支持双引号用于字符串值,但单引号被其他RDBMS更广泛地接受,因此使用单引号而不是双引号是一个好习惯。

使用类似示例查找有关此内容的更多说明: When to use single quotes, double quotes, and backticks in MySQL