因此,我有这段代码可以查询wp数据库中自定义插件生成的表。它工作正常。但我正在尝试将其调整为使用$wpdb,而不是我设置的$con函数。
下面是工作正常但不使用$wpdb的代码:
<?php
$q = strtolower($_GET["q"]);
if (!$q) return;
$isArabic = is_arabic($q);
$con=mysql_connect("localhost","admin","*****");
if($con){
mysql_select_db("arabic_student",$con);
}
else{
die("Could not connect to database");
}
mysql_query("SET NAMES utf8");
$sql = "SELECT DISTINCT en_word, ar_word FROM wp_enar_words WHERE en_word LIKE \'$q%\' OR ar_word LIKE \'$q%\'";
$rsd = mysql_query($sql) or die(mysql_error());
if($isArabic){
while($rs = mysql_fetch_array($rsd)) {
$en_word = $rs[\'en_word\'];
$ar_word = $rs[\'ar_word\'];
echo "$ar_word\\n";
}
}else{
while($rs = mysql_fetch_array($rsd)) {
$en_word = $rs[\'en_word\'];
$ar_word = $rs[\'ar_word\'];
echo "$en_word\\n";
}
}
?>
下面是我尝试使用$wpdb的noob:
global $wpdb;
$sql = $wpdb->get_results("SELECT en_word, ar_word FROM wp_enar_words WHERE en_word LIKE \'$q%\' OR ar_word LIKE \'$q%\'");
$rsd = $wpdb->query(\'$sql\');
但它遇到了一个致命错误:对中的非对象调用成员函数get\\u results()。。。。因此,可能遗漏了一些显而易见的东西,但我希望能够获得一些关于如何将现有代码移植到使用$wpdb的指导。
提前谢谢!
<小时>UPDATE: 所以我开始认为问题在于,这段代码是用jquery插件调用的。我使用jquery autocomplete并调用上述php代码来填充表单autocomplete:
$("#search_words").autocomplete("<?php bloginfo(\'template_directory\'); ?>/search_ac.php", {});
这可能是问题所在吗?我很困惑,因为我的直接调用数据库的原始代码工作得很好,但一旦我使用$wpdb,它就不再起作用了
最合适的回答,由SO网友:Denis de Bernardy 整理而成
错误消息表示代码中的$wpdb当前指向空指针。WP未加载,或者缺少一个简单的global $wpdb;
声明,或两者兼而有之。
如果需要加载WP,请包括WP load。php。
或者更好,在JS中使用ajaxurl:
url = ajaxurl + \'?action=youraction\'
旁边(假设上述代码):
add_action(\'wp_ajax_youraction\', \'yourcode\');
还有一个未经验证的版本(请参阅wp admin/admin ajax.php)