【问题标题】:Odd MySQL error on custom WordPress query自定义 WordPress 查询中出现奇怪的 MySQL 错误
【发布时间】:2013-08-04 18:19:58
【问题描述】:

我正在尝试通过 WordPress 运行 MySQL 查询,以返回我想要删除的帖子列表,因为它们没有“喜欢”投票(使用其他人的插件数据)。该查询在 phpMyAdmin 中完美运行,但是当我通过 WP 运行它时会出现语法错误......我完全看不出它为什么会这样做。

这是查询代码,用于检查超过 30 天且在 wti_like_post 中没有相应“like”条目的帖子(无论是正面还是负面):

$novotesquery = "SELECT * FROM $wpdb->posts
                 WHERE $wpdb->posts.post_type = 'post'
                 AND $wpdb->posts.post_status = 'publish'
                 AND $wpdb->posts.post_date < DATE_SUB(NOW(), INTERVAL 30 DAY)
                 AND $wpdb->posts.ID NOT IN 
                 (SELECT DISTINCT post_id FROM $wpdb->wti_like_post)" ;
$result = $wpdb->get_results($novotesquery);

语法错误表示 SQL 的最后一行(括号中的 SELECT)有问题:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册以获取正确的语法在第 6 行的 ')' 附近"。

当我在 phpMyAdmin 中运行查询(将“$wpdb->”替换为表前缀)时,它会起作用。如果有人能告诉我为什么 SQL 查询将在服务器上运行而不是在 WP 中运行,我将不胜感激。

提前致谢。

【问题讨论】:

  • wp_wti_like_post 标准安装 - 它取决于配置中定义的数据库前缀。
  • 感谢评论和回答,我发现了问题所在。像往常一样,假设是所有错误的根源!我假设“$wpdb->wti_like_post”转换为“DBprefix_wti_like_post”,因为“$wpdb->posts”转换为“DBprefix_posts”。我的假设是错误的。据我所知,它根本不会转换为任何东西,大概是因为它不是内置的 WordPress 表。需要的是“{$wpdb->prefix}wti_like_post”,它强制 DB 前缀到位。现在可以了。非常感谢两位评论者提出的精神提示,询问价值是如何产生的!

标签: mysql wordpress


【解决方案1】:

也许这只是一个防御性括号的问题

$novotesquery = "SELECT * FROM {$wpdb->posts}
                 WHERE {$wpdb->posts}.post_type = 'post'
                 AND {$wpdb->posts}.post_status = 'publish'
                 AND {$wpdb->posts}.post_date < DATE_SUB(NOW(), INTERVAL 30 DAY)
                 AND {$wpdb->posts}.ID NOT IN 
                 (SELECT DISTINCT post_id FROM {$wpdb->wti_like_post})" ;

也许您应该使用 $wpdb->query 方法而不是 get_results,最后,也许 wti_like_posts 在您的代码运行时尚未声明。

在 "$result" 行之前的 die($novotesquery) 怎么样?

【讨论】:

    猜你喜欢
    • 2016-12-16
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2012-05-16
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    相关资源
    最近更新 更多