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

标签 mysql wordpress

我在 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 用户(他们的用户名是他们的电子邮件地址,他们的密码是“test”)。条目 ID 与其 WordPress 用户 ID 的数字不同。

我已使用密码“test”以“[email protected] ”身份登录。

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

我想分两步完成此操作:

  1. 查找当前登录用户的电子邮件地址(“[email protected] ”)。
  2. 查找该用户表单条目 (10) 的“item_id”,该条目位于匹配电子邮件地址的同一行。

这是我想出的代码:

    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 is a string.

$id is a NULL.

The current logged in user is [email protected].

The current form entry id is .

请注意,$idNULL。让我困惑的是,当我将 $id 变量更改为此(将变量 $email 替换为“[email protected] ”)时:

$id = $wpdb->get_var( " SELECT item_id FROM ihn_2_frm_item_metas WHERE meta_value = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="52303d30123f33203e372b7c313d3f" rel="noreferrer noopener nofollow">[email protected]</a>' " );

我的输出正是我需要的:

$email is a string.

$id is a string.

The current logged in user is [email protected].

The current form entry id is 10.

我哪里出错了?

最佳答案

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

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

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

如果您不需要实际知道 item_id 的值,只需在后续查询中使用它,我想您可以使用 IN( ) 子查询:

$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'
  )
");

关于mysql - 使用变量时 WordPress 数据库查询 ($wpdb) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161291/

相关文章:

php - 查找值所在的表名? MySQL PHP

php - Vuejs Ajax 调用触发错误函数

wordpress - wordpress 的本地化 : Date and Time

wordpress - 在 WordPress 中添加类到评论表单

python - 通过python程序插入数据库(mysql)

mysql - 选择 SQL 中最常见的项目

javascript - 如何只提交一次jquery ajax post请求?

php - 从 Woocommerce Bookings 中的购物车项目中获取人员类型名称

html - CSS 下拉菜单 - 整个栏都在移动

php - mysql CREATE TABLE with JOIN multiple table ...当数据添加到连接的表时,php自动更新新表