我正确查询我的MySQL表吗?

时间:2016-01-04 03:52:33

标签: php mysql sql wordpress wpdb

我需要编写一个将连接2个表然后返回单个值的查询。其中一个表是wp_users。另一个是我创建的一个名为wp_fd_braintree_users的表(我用“wp_”作为前缀,这意味着我可以使用$wpdb->prefix.吧?)。此表将存储另一个ID,该ID对我站点的每个用户都是唯一的。

我无法弄清楚$wpdb->query()的用途。食典委提到了它,但我找不到它在哪里解释它的用途。我也知道我需要使用$wpdb->prepare(),但我不明白如何将第二个参数写入此函数。下面的代码如何显示?我可以在自定义表格上使用query()prepare()吗?

<?php

    $user_id = (need to find some function that returns the current user's ID...)

    $query = $wpdb->query(prepare(

    "
    SELECT
      wp_fd_braintree_users.bt_id

    FROM
      wp_fd_braintree_users
      INNER JOIN wp_users ON wp_fd_braintree_users.ID = wp_users.ID

    WHERE
      wp_users.ID = $user_id
    "

    ));

?>

3 个答案:

答案 0 :(得分:0)

获取当前/已记录的用户ID

$user_id = get_current_user_id();

答案 1 :(得分:0)

但如果您没有设置数据库,则必须执行

SELECT database_name.bt_id FROM table name...

这可能是一个有贡献的错误。然后将该代码插入函数并将人名电子邮件或其他任何内容设置到函数的参数部分,让函数返回$ wpdb变量,它应该返回从数据库中检索的值。

答案 2 :(得分:0)

它只是运行您提供的SQL查询。有关详细信息,请查看wpdb class文档。 Prepare用于准备SQL语句,没有wpdb对象就不能使用这些函数,因为它们不是标准的PHP函数;他们是wordpress中WPDB类的成员。

这是正确的(如果$ user_id可以用于SQL注入):

<?php
$query = $wpdb->query($wpdb->prepare("SELECT wp_fd_braintree_users.bt_id FROM
      wp_fd_braintree_users INNER JOIN wp_users ON wp_fd_braintree_users.ID = wp_users.ID WHERE wp_users.ID = %d;", $user_id));
?>

现在就你的$user_id = get_current_user_id();而言,我希望你不要过早地调用这个功能。 wordpress文档的含义是,如果您在init挂钩可用之前调用代码,则可能会导致问题,因为此函数所需的必要数据尚未设置。主要是在模板文件中,您可以自由使用它,但是如果您使用的是functions.php或它所需的任何文件,您应该确保不会过早地调用此函数。