-1

好的,我真的很难掌握 PDO,即使在尝试转换所有内容后 2 天。

我现在正处于创建数组的阶段,$user_data['???']这就是我所拥有的。

if (logged_in() === true) {
    $session_user_id = $_SESSION['user_id'];
    $user_data = user_data($session_user_id, 'id', 'username', 'password', 'email', 'active', 'coins');
    $user_id = $user_data['id'];
    if (user_active($user_data['username'] === false) {
        session_destroy();
        header('Location: index.php');
        exit();
    }
}

所以这就是我获取数据的方式$user_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) . '`';
        $data = //mysql_fetch_assoc(//mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));

        return $data;
    }
}

function user_active($username) { 
    $username = sanitize($username);
    $query = //mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `active` = 1");
    return (//mysql_result($query, 0) == 1) ? true : false;
}

我正在努力弄清楚如何将其转换为 PDO,任何人都可以给我任何帮助吗?

此外,在我将其转换为 PDO 之后。用简单的消息说欢迎用户会很简单,Welcome <?php $user_data['username'] ?>, Hope you enjoy your stay!还是我现在需要使用完全不同的方法?

提前致谢 !

4

2 回答 2

2

因此,通过示例代码的外观,我得到的印象是您正在从已弃用的 mysql 扩展迁移到 PDO。

mysql 扩展所做的可能会让您感到困惑的是,如果您不指定 mysql 链接资源,mysql_query它会使用最后创建的链接资源,该链接资源由mysql_connect. 一旦你开始使用 PDO,你将不得不在user_dataanduser_active函数中使用 PDO 连接。最简单的方法是在每个函数中创建一个 PDO 连接,这是非常重复的,根本不是一个好的解决方案,但它确实有效。

代码中也存在一些sql注入漏洞的问题。除此之外,您可以编写如下函数:

<?php

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

    // connect to the DB
    $dsn = 'mysql:dbname=<your_db_name>;host=127.0.0.1';
    $user = '<your_db_user>';
    $password = '<your_db_user_password>';
    $dbh = new PDO($dsn, $user, $password);

    // request the data
    $fields = '`' . implode('`, `', $func_get_args) . '`';
    $sql = sprintf('select %s from users where user_id = ? limit 1', $fields);
    $stmt = $dbh->prepare($sql);
    $stmt->execute(array($userid));
    $data = $stmt->fetch(PDO::FETCH_ASSOC);

    return $data;
  }
}

function user_active($username) { 
  $username = sanitize($username);

  // connect to the DB
  $dsn = 'mysql:dbname=<your_db_name>;host=127.0.0.1';
  $user = '<your_db_user>';
  $password = '<your_db_user_password>';
  $dbh = new PDO($dsn, $user, $password);

  $sql = 'select count(user_id) from users where username = ? and active';
  $stmt = $dbh->prepare($sql);
  $stmt->execute(array($username));

  return $stmt->fetchColumn() == 1;      

}  

希望能帮助到你。

于 2013-05-10T02:07:53.363 回答
0

首先,您必须处理连接。PDO 是 OO:

$db = new PDO("mysql:host=127.0.0.1;dbname=somedb",'root');

然后你得到行:

$rows = $db->query('select name from People');

你的功能应该是这样的:

function user_data($user_id,$db){
    $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 = $db->query("SELECT $fields FROM `users` WHERE `user_id` = $user_id");

        return $data;
    }
}



function user_active($username,$db) { 
    $username = sanitize($username);
    $data = $db->query("SELECT COUNT(`user_id`) qtd FROM `users` WHERE `username` = '$username' AND `active` = 1");
    return ($data['qtd'] == 1) ? true : false;
}

其中 $db 是具有有效连接的 PDO 实例。所以,如果我们有一个脚本来调用这些函数,它应该是这样的:

<?php
  import "file_where_functions_are_defined.php";
  $db = new PDO("mysql:host=127.0.0.1;dbname=somedb",'root');
  $user_data = user_data(1,$db);
?>
于 2013-05-10T01:52:43.530 回答