如何将此功能从mysql更改为pdo?

时间:2014-11-11 15:09:15

标签: php mysql function pdo

我有以下代码可以轻松地从数据库中显示用户数据。

如果用户已登录,我可以回复$user_data['username']

之类的内容
if (logged_in() === true) {
    $session_user_id = $_SESSION['user_id'];
    $user_data = user_data($session_user_id, 'user_id', 'username', 'password', 'first_name', 'last_name', 'email', 'password_recover', 'type', 'allow_email', 'profile');

使用此功能:

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

但是这个函数显然是mysql,我不知道如何将它改为PDO,所以我希望别人能做到。

这是我的 connect.php 中唯一一个与数据库(PDO)连接的代码,我在每个页面都包含这些代码。

$con = new PDO("mysql:host=localhost; dbname=###", '###', '###');

1 个答案:

答案 0 :(得分:0)

<?php

function user_data($user_id){

$pdo = new PDO("mysql:host=host;dbname=db;", "user", "password");
$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 = "SELECT $fields FROM `users` WHERE `user_id` = $user_id";

    $stmt = $pdo->prepare($query);
    $stmt->execute();

    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    return $data;
}
}

这不是最佳解决方案,但现在应该做。考虑使用带有绑定参数的预准备语句。

fyi:这没有经过测试,但应该有效。如果您的内爆代码是正确的,那么应该没有问题。实际上只添加了PDO连接创建并执行了没有参数的准备查询,并且在获取结果之后作为关联数组。