最初我使用由 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/