我一直在使用WordPress Codex,似乎我的语法是正确的,但我似乎无法追查为什么我一直在我的errors.text
文件中找到一行错误相关的下面的代码,用于WordPress短代码:
function blahblah_display_referrer() {
global $wpdb, $user_ID;
// Logged in user
if ( is_user_logged_in() == true ) {
$sql = "SELECT display_name FROM " .$wpdb->prefix. "users WHERE ID=".$user_ID;
$ref = $wpdb->get_var($wpdb->prepare($sql));
return 'Welcome Back: '.$ref;
}
// Visitor message with cookie or without...
$ref = $_COOKIE['ref'];
$sql = "SELECT display_name FROM " .$wpdb->prefix. "users WHERE ID=".$ref;
$ref = $wpdb->get_var($wpdb->prepare($sql));
if ( !isset($ref) ) {
return 'Welcome Visitor';
}
return 'Referred By: '.$ref;
}
正如我之前所说,这段代码完美无缺地执行。它只显示以下错误:
[10-Jul-2012 15:10:45] WordPress database error You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to
use near '' at line 1 for query SELECT display_name FROM wp_users WHERE ID= made by
require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'),
include('/themes/kaboodle/index.php'), get_sidebar, locate_template, load_template,
require_once('/themes/kaboodle/sidebar.php'), woo_sidebar, dynamic_sidebar,
call_user_func_array, WP_Widget->display_callback, WP_Widget_Text->widget,
apply_filters('widget_text'), call_user_func_array, do_shortcode, preg_replace_callback,
do_shortcode_tag, call_user_func, blahblah_display_referrer
这是我的服务器信息:
Apache version 2.2.21
PHP version 5.2.17
MySQL version 5.1.63-cll
Architecture x86_64
Operating system linux
答案 0 :(得分:0)
似乎Wordpress的WPDB数据库模块suppresses SQL errors by default。
您可以使用show_errors和打开和关闭错误回显 hide_errors,分别。
<?php $wpdb->show_errors(); ?> <?php $wpdb->hide_errors(); ?>
您还可以打印最近生成的错误(如果有) 使用print_error进行查询。
<?php $wpdb->print_error(); ?>
这可能是问题吗?
答案 1 :(得分:0)
我遇到了同样的问题,答案是在错误中,但这并不明显。每当有人访问该页面时,您都在运行Ref查询,无论他们是否有cookie。当您进行测试时,您最有可能使用cookie进行测试,因此不会产生错误。但是,当它在没有cookie的情况下运行时,它正在搜索空白ID。
我已在下面修改了您的代码并对更改进行了评论。
// Visitor message with cookie or without...
$ref = $_COOKIE['ref'];
/* This section should only run if there is a ref from the cookie
$sql = "SELECT display_name FROM " .$wpdb->prefix. "users WHERE ID=".$ref;
$ref = $wpdb->get_var($wpdb->prepare($sql)); */
if ( !isset($ref) || $ref == "" ) { //In case the cookie returns blank instead of null
return 'Welcome Visitor';
} else { //added this section after the check for $ref so it only runs where there is a ref
$sql = "SELECT display_name FROM " .$wpdb->prefix. "users WHERE ID=".$ref;
$ref = $wpdb->get_var($wpdb->prepare($sql));
}
return 'Referred By: '.$ref;
希望这会有所帮助。