php - 将用户添加到数据库时使用 PHP 类

标签 php mysql class

最初我使用由 for 循环创建的串联查询将大量玩家/用户添加到 mysql 数据库。今天,我想尝试使用类,因为我并不真正了解它们的用例。

在下面的类中,新用户(+数据)被添加到数据库并返回最后插入行的唯一 ID 号。

我原以为将此插入作为一个查询进行是最快的方法,而不是每次我都实例化一个新播放器,但老实说,我仍处于初学者阶段,因此欢迎提供一些建议,或有关如何最好地优化它的建议。

理想情况下,作为一个查询,除非我假设这更快是错误的?

是否可以将多个玩家的唯一 ID 作为数组返回?

class player {
    var $player;
    var $PlayerID;
    var $email;
    function create_player($new_player, $email, $password, $db) {
        $this->player = $new_player;
        $this->email = $email;

        $salt = "xxx"; //simplified for this example            
        $passwordhash = $password; //simplified for this example
        $query = "INSERT INTO userstest (name, email, hash, salt ) values(:name, :email, :hash, :salt)";
        $params = array (':name' => $new_player, ':email' => $email, ':hash' => $passwordhash, ':salt' => $salt);

        $stmt = $db->prepare($query); 
        $stmt->execute($params); 
        $id = $db->lastInsertId();
        $this->PlayerID = $id;
    }
}

最佳答案

我正在使用 PDO,因为它是处理 PHP 中的 Database 的首选解决方案,您可以试试这个结构:

Class Player {
    public $playerName;
    public $playerID;
    public $email;
    public $pass;
    public $salt;
}

Class PlayerDAO {
    public function add(Player $player) {
        $sql = "INSERT INTO userstest (name, email, hash, salt) values(?, ?, ?, ?)";
        $params = [$player->playerName, $player->email, $player->pass, $player->salt];

        $this->db_add($sql, $params, false);
    }

    public function add_multi($players) {
        $sql = "INSERT INTO userstest (name, email, hash, salt) values(?, ?, ?, ?)";
        $params_arr = [];
        foreach($players as $player) {
            $params = [$player->playerName, $player->email, $player->pass, $player->salt];
            $params_arr[] = $params;
        }

        $this->db_add($sql, $params, true);
    }


    private function db_add($sql, $params, $is_multi) {
        $stmt = $this->link->prepare($sql);

        $res = [];
        if ($is_multi) {
            foreach ($params as $params_1) {
                $res[] = $stmt->execute($params_1);
            }
        } else {
            $res[] = $stmt->execute($params);
        }
        if (!$res) {
            print_r($stmt->errorInfo());
            //$this->errorCode = $stmt->errorCode();
        }
        //$this->rowsAffected = $stmt->rowCount();
        //$this->lastInsertedId = $this->link->lastInsertId();

        return $res;
}

确保准备好 $link var 作为数据库连接器

如果你有多个类,你可以为它们创建一个父类,

关于php - 将用户添加到数据库时使用 PHP 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520103/

相关文章:

php - 使用行和列索引以表格格式显示数据库表中的数据

javascript - 将整数传递给查询时,NodeJS MySQL 返回空数组

php - 如何获取选中的checkbox对应的值

python 不同模块的类继承

php - if(!isset($_SESSION ['username' ])) 导致用户从 verify_login_form.php 重定向回 index.php

php - symfony 3 - 来自数据库的 url 图片

php - Symfony3 项目中的 POMM2,注册转换器时遇到问题

MySQL 检查 3 个或更多连续(特定)条目

swift - 属性初始值设定项在 'self' 可用之前运行

c++ - C++ 中的不可变类