将php函数转换为pdo函数


converting a php function a pdo function

我需要转换这个:

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);
    }
}

问题是我不能让第二点工作。我一直收到这个:

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

如果你需要任何其他信息,我将非常乐意提供。如果不可能,请告诉我正确的方法。顶部工作,底部需要工作。

提前感谢

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

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

  • 将其作为参数传递(依赖项注入)
  • user_data()内建立连接(效率低下)
  • 或使用global(设计不良)

我猜您在变量作用域方面有问题。您应该将$db变量传递给函数(首选),或者使用global $db声明将变量从全局作用域导入函数的作用域。

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

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

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

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