【问题标题】:wpdb SQL Unknown column 'username' in 'where clause' error'where 子句'错误中的 wpdb SQL 未知列'用户名'
【发布时间】:2014-02-13 07:14:16
【问题描述】:

我一直试图弄清楚为什么我的查询没有从我的表中返回任何结果。我的表名是 wp_user_orders。列 user_name 在该表中。准备和查询都返回空数组。里面有查询的get结果返回数据库错误。

PHP:

<?php 
    $dirName1 = 'C:/wamp/www/c2c/wp-content/themes/flawless-v1-01';
    $dirName2 = 'C:/wamp/www/c2c';
    require_once($dirName1.'/config/setup.php');
    require_once($dirName2.'/wp-config.php');
    require_once($dirName2.'/wp-load.php');
    require_once($dirName1.'/include/function/encryption-class.php');
    require_once($dirName1.'/include/function/price-calculations.php');

    define('WP_DEBUG', true);
    $wpdb->show_errors();
    $tableName = $wpdb->prefix . "user_orders";
    $user = wp_get_current_user();
    $userId = $user->ID;
    $userName = $user->user_login;
    echo $tableName . ':  ' . $userId . ': '. $userName; 
    echo var_dump($tableName); 
    echo var_dump($userId); 
    echo var_dump($userName); 
    $myQuery = $wpdb->prepare("SELECT * FROM $tableName WHERE user_name = %s", $tableName, $userName);
    $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM %s WHERE user_name = %s", $tableName, $userName), ARRAY_A);
    $results2 = $wpdb->get_results($wpdb->query("SELECT * FROM $tableName WHERE user_name = $userName"));
    print_r($results2);
    echo var_dump($results2);
    print_r($results);
    echo var_dump($results);

    $wpdb->print_error;


?>

我的 php 显示:

 wp_user_orders: 2: kronus

string 'wp_user_orders' (length=14)

int 2

string 'kronus' (length=6)

WordPress database error: [Unknown column 'kronus' in 'where clause']
SELECT * FROM wp_user_orders WHERE user_name = kronus

null

Array ( )

array (size=0)
  empty

我觉得我只是错过了一些明显的东西,但我很难过。

更新:

更新了我不正确的准备语句。

上一个:

$wpdb->prepare("SELECT * FROM $tableName WHERE `user_name` = %s", $tableName, $userName)

新:

$wpdb->prepare("SELECT * FROM %s WHERE `user_name` = %s", $tableName, $userName)

变化带来的新错误:

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 ''wp_user_orders' WHERE `user_name` = 'kronus'' at line 1]
SELECT * FROM 'wp_user_orders' WHERE `user_name` = 'kronus'

【问题讨论】:

    标签: php mysql sql wordpress


    【解决方案1】:

    您既不是引用您的用户名,也不是使用变量准备查询,我建议您这样做

    $results = $wpdb->get_results($wpdb->prepare("SELECT * FROM $tableName WHERE user_name = %s",$username));
    

    【讨论】:

    • 这成功返回了一些结果!您是否知道为什么我在编辑中更新的准备好的语句不起作用?
    • 因为表名是查询结构的一部分,而不是数据值,所以它不应该作为准备好的变量传入。
    • 不是真的,这是一个很容易犯的错误,特别是如果你不习惯准备好的语句:)
    猜你喜欢
    • 2018-01-16
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多