【发布时间】:2017-02-28 22:41:33
【问题描述】:
最初我使用 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;
}
}
【问题讨论】:
-
如果您不只是投反对票,而是花时间告诉我为什么您认为这是一个糟糕的问题,那就太棒了。虽然这对你来说很明显,但对我来说还不清楚。因此问题。至少有理由我有一些方向可以进一步研究和理解。
-
当插入多行时,可能值得使用带有事务的批量插入。即继续使用不同的参数调用`$stmt->execute($params);`。查看有关它的详细信息::PDO - Insert large array to MySQL database。它的效率惊人,而且编码简单。