我正在做一些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'的计数。
无论如何都要编写第一个没有反向标记的代码,它会完美运行吗?
答案 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还希望将DATE
和DATETIME
字面值作为'2001-01-01 00:00:00'
等字符串单引号
MySQL也支持双引号用于字符串值,但单引号被其他RDBMS更广泛地接受,因此使用单引号而不是双引号是一个好习惯。
使用类似示例查找有关此内容的更多说明: When to use single quotes, double quotes, and backticks in MySQL