0

我需要转换这个:

function user_data($user_id) {
    $data = array();
    $user_id = (int)$user_id;

    $func_num_args = func_num_args();
    $func_get_args = func_get_args();

    if ($func_num_args > 1) {
        unset($func_get_args[0]);   

        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM users WHERE user_id = $user_id"));

        return $data;
    }

}

对此:

function user_data($user_id) {
    $data = array();
    $user_id = (int)$user_id;
    $func_num_args = func_num_args();
    $func_get_args = func_get_args();
    if ($func_num_args > 1) {
        unset($func_get_args[0]);   
        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $query = $db->prepare("SELECT $fields FROM `admin` WHERE `id` = :user_id");
        $query->bindParam(":user_id", $user_id);
        $query->execute();
        $data = $query->fetch(PDO::FETCH_ASSOC);
        print_r ($data);
    }
}

问题是我无法让第二位工作。我不断得到这个:

致命错误:在第 39 行的 /home/ds4887/public_html/silverjet/v1.20/admin/core/functions/main.php 中的非对象上调用成员函数 prepare()

如果您需要任何其他信息,我将非常乐意提供。如果不可能,那么有人可以请我正确的方法来做到这一点。顶部工作,底部需要工作。

提前致谢

4

3 回答 3

3

$db内未定义user_data()。因此,$db->prepare()失败并出现错误。

您需要建立您的PDO 连接并确保可以通过以下user_data()方式访问$db

于 2013-09-05T02:32:28.263 回答
0

我的猜测是你有一个变量范围的问题。您应该将$db变量传递给函数(首选),或使用global $db声明将变量从全局范围导入函数的范围。

您之前的函数之所以有效,是因为您使用mysql_query()的是一种骇人听闻的方式,而没有指定查询的连接。在这种情况下,默认行为是全局使用最近打开的 mysql 资源链接,所以它恰好起作用。

于 2013-09-05T02:32:13.223 回答
0

您没有为此行传递 $db 的值:

  $query = $db->prepare("SELECT $fields FROM `admin` WHERE `id` = :user_id");

$db 是连接数据库时设置的连接资源。您在 PDO 中需要它,但您可以不使用它,mysql因为mysql假设您建立的最后一个连接。

于 2013-09-05T02:33:30.920 回答