在SQL查询中使用Drupal变量

时间:2009-12-16 21:44:32

标签: php drupal

我正在尝试将变量填充到SQL查询中以将值返回到页面。

$sql = 'SELECT account FROM users WHERE uid = arg(1)';

其中arg(1)=当前正在查看的用户。我在页面顶部输出arg(1),所以我知道它在那里,但Drupal似乎不想接受它。我试过逃避几种不同的方式。以下是完整的代码

  function accountselect_getclientaccount() {
      global $user;
      $sql = 'SELECT account FROM users WHERE uid = arg(1)';
      $result = db_result(db_query($sql));
    return $result;
  }

3 个答案:

答案 0 :(得分:1)

你可以尝试:

$uid = arg(1);
$result = db_result(db_query("SELECT account FROM {users} WHERE uid = %d", $uid));

答案 1 :(得分:1)

要避免sql-injection,您应该使用占位符(有关详细信息,请参阅db_query):

$result = db_query("SELECT * FROM {users} WHERE uid = %d", arg(1));

另请注意,db_result适用于单列单结果查询。您可能想要使用db_fetch_object。此外,users表中没有名为account的列。

答案 2 :(得分:1)

function accountselect_getclientaccount() {
  return (arg(0) == 'user') ? db_result(db_query('SELECT account FROM {users} WHERE uid = %d', arg(1))) : FALSE;
  }

我不知道你为什么要使用全球$用户。也许你应该使用$ user-> uid而不是arg(1)?这将节省您检查arg(1)实际上是一个用户ID。

这可能会更好:

function accountselect_getclientaccount($account) {
  return db_result(db_query('SELECT account FROM {users} WHERE uid = %d', $account->uid));
  }

另外:查看用户钩子。最好在加载操作中返回'account'col(如果你还没有这样做)

http://api.drupal.org/api/function/hook_user/6