修复wpdb::Prepare的插件

时间:2013-12-12 作者:Andrew

以前的一位开发人员为我管理的网站创建了一个插件,除了我得到错误“缺少wpdb::prepare()的参数2”之外,一切似乎都正常。我理解需要添加参数,但我不清楚如何将它们添加到这个特定代码中,或者在这种情况下添加什么参数。

代码如下所示。任何指点都会很神奇。错误出现在第四个结束的花括号之后,在“$judgets=”之前。看起来查询现在应该是$wpdb->prepare,但在这个例子中,我不清楚如何在代码中实现它。

更新时间:

抱歉,我是个大傻瓜。下面的代码是插件的真实代码。我之前看过错误的代码行。

$categories = $wpdb->get_results($wpdb->prepare(sprintf("SELECT c.categoryid as id, c.name, c.public, COUNT(jc.categoryid) as submissions FROM ".$wpdb->prefix."judge_category c LEFT JOIN ". $wpdb->prefix. "judge_submission_category jc ON jc.categoryid = c.categoryid %s GROUP BY c.categoryid %s",$_where, $_order)));
根据已经提供的反馈,我会看看我现在是否能做到这一点,一旦我弄明白了,我会发布正确的答案,除非其他人先发现它。

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

您面临的错误肯定不是来自上面显示的代码。这是WP 3.5(IIRC)中提出的错误通知,应注意独立$wpdb->prepare( STATEMENT ); 打电话没什么帮助。

Missing argument 2 for wpdb::prepare()

告诉您尚未向调用添加任何参数。这个prepare() 方法的工作原理如下sprintf() 除了它只知道%s 对于字符串和%d 数字。

因此,请这样使用:

global $wpdb;
$wpdb->query( $wpdb->prepare(
    "SELECT * FROM {$wpdb->posts} WHERE ID = %d AND post_type = %s",
    abs_int( $_GET[\'post_id\'] ),
    esc_attr( $_GET[\'type\' )
) );
请记住,这只是演示如何正确保护WP DB调用中处理的HTML表单数据的伪代码。

SO网友:Chittaranjan

EDIT

这是正确问题的答案。

$categories = $wpdb->get_results(
                    $wpdb->prepare(
                            "SELECT c.categoryid as id, c.name, c.public, COUNT(jc.categoryid) as submissions
                            FROM ".$wpdb->prefix."judge_category c LEFT JOIN ". $wpdb->prefix. "judge_submission_category jc
                            ON jc.categoryid = c.categoryid %s GROUP BY c.categoryid %s", $_where, $_order
                        )
                    );

PREVIOUS ANSWER BASED ON THE ORIGINAL QUESTION

将查询更改为以下内容

$judges = $wpdb->get_results(
                    $wpdb->prepare(
                            "SELECT u.ID, u.user_login, u.display_name, u.user_nicename, u.user_status, COUNT(c.categoryid) as categories
                            FROM ".$wpdb->prefix."users u LEFT JOIN ". $wpdb->prefix."judge_judge_category c
                            ON c.ID = u.ID WHERE (SELECT umeta_id FROM ". $wpdb->prefix. "usermeta
                            WHERE user_id = u.ID AND meta_key = \'wp_capabilities\' AND
                            meta_value LIKE \'%%judge%%\') > 0 %s GROUP BY u.ID %s",
                            $_where, $_order)
                    );

结束

相关推荐

在wpdb中的哪里添加新表名?

我已经在中手动设置了一个新表wp-db 数据库在中的何处添加此表的名称wpdb 班级还是其他地方?我注意到WordPress使用如下查询:$user_count = $wpdb->get_var( \"SELECT COUNT(*) FROM $wpdb->users\" ); 其中未使用实际表名。如果我要这样做:$user_count = $wpdb->get_var( \"SELECT COUNT(*) FROM $wpdb->friends\" ); 这行不通。我也试着加上这