-1

さて、すべてを変換しようとして 2 日経った後でも、PDO を理解するのに本当に苦労しています。

私は今、の配列を作成する段階にあり$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_datauser_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 はオブジェクト指向です:

$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 に答える