使用变量时Wordpress数据库查询($ wpdb)错误

时间:2012-08-28 14:16:50

标签: mysql wordpress wpdb

我在WordPress MultiSite上有一个名为“ihn_2_frm_item_metas”的自定义WordPress表,用于表单条目。

数据库表的屏幕截图位于:https://www.dropbox.com/s/ex54qxxohkexg5t/mysql.png

目前,有两个条目。每个条目都有自己独特的“item_id”(在这种情况下,Bob Marley的条目的id为10,而Molly Dolly的条目的id为9)。这些条目也对应于实际的WordPress用户(他们的用户名是他们的电子邮件地址,他们的密码是“测试”)。条目ID与其WordPress用户ID不同。

我使用密码“test”登录为“bob@marley.com”。

在博客的主页上,我希望仅显示当前登录用户的“meta_value”列中的所有项目。

我想分两步完成:

  1. 查找当前登录用户的电子邮件地址(“bob@marley.com”)。
  2. 找到该用户的表单条目(10)的“item_id”,该条目位于匹配的电子邮件地址的同一行。
  3. 以下是我提出的代码:

        global $wpdb;
        global $current_user;
        get_currentuserinfo();
        $email = $current_user->user_email;
    
        $id = $wpdb->get_var( " SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = $email " );
        $client_meta = $wpdb->get_results(" SELECT * FROM ihn_2_frm_item_metas WHERE item_id = $id " );
    
        echo '<p> $email is a ' . gettype($email) . '</p>';
        echo '<p> $id is a ' . gettype($id) . '</p>';
        echo '<p>The current logged in user is ' . $email . '.</p>';
        echo '<p>The current form entry id is ' . $id . '.</p>';
        echo "<ul>";
    
        foreach ($client_meta as $value) {
            echo '<li>' . $value->meta_value . '</li>';
        }
    
        echo "</ul>";
    

    我有两个gettype()语句只是为了确认我的两个可变数据$email$id都是字符串。

    以下是我的代码输出:

      

    $ email是一个字符串。

         

    $ id是NULL。

         

    当前登录的用户是bob@marley.com。

         

    当前表单条目ID为。

    请注意,$idNULL。令我困惑的是,当我将$id变量更改为此(用'bob@marley.com'替换变量$email)时:

    $id = $wpdb->get_var( " SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = 'bob@marley.com' " );
    

    我的输出正是我所需要的:

      

    $ email是一个字符串。

         

    $ id是一个字符串。

         

    当前登录的用户是bob@marley.com。

         

    当前表单条目ID为10.

         
        
    • 鲍勃
    •   
    • 马利
    •   
    • bob@marley.com
    •   
    • 测试
    •   
    • 8
    •   

    我哪里出错?

1 个答案:

答案 0 :(得分:2)

您在$email上省略了单引号:

$id = $wpdb->get_var( " SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = '$email' " );
//---------------------------------------------------------------------------------^^^^^^^^

这会导致查询中出现语法错误。我不熟悉WordPress如何处理这些错误,但是它会在不成功的查询上返回NULL

如果您不需要实际知道item_id的值而不是在后续查询中使用它,我想您可以使用IN()子查询将它们组合成单个语句:< / p>

$client_meta = $wpdb->get_results("
  SELECT * FROM ihn_2_frm_item_metas WHERE item_id IN (
    SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = '$email'
  )
");