WordPress插件中的SQL查询问题

时间:2015-03-02 作者:Roger Andersen

我有这个,我不知道为什么它不起作用。它没有从第一个查询返回ID,因此我可以在第二个查询中使用它。不管引用者是谁,它都是从外部链接引用的。

require("/home/username/public_html/wp-load.php");

global $wpdb;

$sql = $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_url LIKE \'%%s\'%", $_SERVER[\'HTTP_REFERER\'] );
$row = $wpdb->get_row($sql);
$lid = $row->link_id;

$wpdb->query("UPDATE $wpdb->wptstats SET impressions = impressions+1 WHERE link_id = ".$lid);
谁能帮我找到正确的方向吗?

错误日志文件

[2015年3月3日17:13:26 UTC]WordPress数据库错误您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在查询更新的第1行“SET impressions=impressions+1 WHERE link\\u id=”附近使用的正确语法SET impressions=impressions+1 WHERE link\\u id=

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

我想问题可能出在你的通配符上。因为您试图在prepare中使用通配符,这需要%s, WPDP不知道通配符之间的区别% 和占位符%. 使用此答案作为参考:How to use wildcards in $wpdb queries using $wpdb->get_results & $wpdb->prepare? 您必须双重转义通配符:

$sql = $wpdb->prepare( "SELECT link_id FROM $wpdb->links WHERE link_url LIKE \'%%%s%%\'", $_SERVER[\'HTTP_REFERER\'] );
还有一个问题是,通配符在单引号之外\'. 希望这对你有用。

至于错误,试试这个,我可以更新link_rating 虽然我不熟悉wpstats,但使用相同的方法:

$wpdb->query( "UPDATE $wpdb->wptstats SET impressions = impressions+1 WHERE link_id = $lid" );
使用更新函数代替查询:

$wpdb->update(
    $wpdb->wptstats ,
    array( \'impressions\' => \'impressions\' + 1 ),
    array( \'link_id\' => $lid ),
    array( \'%d\' )
);

结束

相关推荐

Ajax Query returns zero

我正在执行简单的wordpress select查询,希望使用ajax jquery执行此操作,并且不希望在按下搜索按钮并在搜索文本框中写入文本时页面刷新。我一按搜索按钮就得到零。。请在这方面提供帮助,因为如果我使用普通查询,它会使用表单提交给出结果,无论我做什么,它都会给出零。谢谢jQuery(document).ready(function() { jQuery(\"#Submityourskill\").click(function(e){ ev