为什么我的SQL查询没有返回任何记录?

为什么我的SQL查询没有返回任何记录?

问题描述:

我试图获得我的数据库表中其中一个post_id字段等于我比较它的$postID变量的记录数。当我使用130等整数替换{$postID}时,查询按预期返回结果。但是,每当我尝试使用$postID变量查询我的数据库时,都不会返回任何结果。我已检查了$postID包含的内容,以确保post_id与正确的值进行比较,并且它包含整数值130为什么我的SQL查询没有返回任何记录?

如果查询与地方的$postID硬编码130工作,为什么没有当我使用$postID等于130以及工作吗?

$postID = get_the_ID(); 
$postLikes = $wpdb->get_results(' 
    SELECT COUNT(*) FROM wp_post_likes WHERE post_id = {$postID} 
'); 

echo "<pre>"; 
    var_dump($postLikes); 
echo "</pre>"; 
+9

变量替换不发生在单引号的字符串。 – VolkerK

+0

这是正确的。你真棒,从来不知道。 – 10000RubyPools

+0

作为PHP文档中相应部分的补充:[php:单引号](http://php.net/manual/en/language.types.string.php#language.types.string.syntax.single)'[ ...]注意:与双引号和heredoc语法不同,特殊字符的变量和转义序列在单引号字符串中不会被扩展[...]' –

变量替换不发生在单引号的字符串,见Variable parsing

而且我建议你使用参数化查询,而不是有效载荷数据混合到实际的声明,请参阅Protect Queries Against SQL Injection Attacks

$postLikes = $wpdb->get_col($wpdb->prepare( 
    'SELECT COUNT(*) FROM wp_post_likes WHERE post_id = %s', 
    get_the_ID() 
));