我的问题是,在我的Wordpress CMS中添加新插件后,我的网站以及Wordpress CMS显示PHP错误:
警告:缺少wpdb :: prepare()的参数2,在第433行的/home/a4921378/public_html/wp-content/themes/xscholar/framework/includes/core-functions.php中调用,并在/ home中定义第1285行/a4921378/public_html/wp-includes/wp-db.php
图片:
有人可以告诉我出了什么问题,如果有人转换/修复这段代码,我会非常感激。
我: 我是一名业余编码员,只了解基础知识并且尚未学习PHP,我经常使用Wordpress,但之前从未出现过类似的东西。我一直想弄清楚什么是错的但是在2个小时内没有成功。
我已访问了php-warning-missing-argument-2-for-wpdb-prepare和missing-argument-2-for-wpdbprepare
页面$terms = $wpdb->get_results($wpdb->prepare( 'SELECT name, slug FROM ' . $wpdb->prefix . 'terms, ' . $wpdb->prefix . 'term_taxonomy WHERE ' . $wpdb->prefix . 'terms.term_id = ' . $wpdb->prefix . 'term_taxonomy.term_id AND taxonomy = "product_cat" ORDER BY name ASC;'));
$wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url));
答案 0 :(得分:0)
您的第一个查询不必使用$wpdb->prepare
,因为查询没有任何占位符(What a placeholder is?)。只需使用:
$terms = $wpdb->get_results('SELECT name, slug FROM ' . $wpdb->prefix . 'terms, ' . $wpdb->prefix . 'term_taxonomy WHERE ' . $wpdb->prefix . 'terms.term_id = ' . $wpdb->prefix . 'term_taxonomy.term_id AND taxonomy = "product_cat" ORDER BY name ASC;');
您的第二个查询有一个占位符(%s
),但它包含在引号中。它不应该被包装,prepare
方法会处理它。只需使用:
$wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = %s AND wposts.post_type = 'attachment'", $attachment_url));