我正在尝试在我的网站上创建帐户之前检查用户的数据是否尚未使用。
我尝试过的(下面的代码)是查询每个必须唯一的数据(电子邮件和电话),但是事情开始变慢了。
这是我尝试使用的代码:
$email_amount = $connection->query('SELECT * FROM users WHERE email = \'' . $email . '\'')->num_rows;
$phone_amount = $connection->query('SELECT * FROM users WHERE phone = \'' . $phone . '\'')->num_rows;
if ($email_amount > 0) {
echo '<script>showError(\'ERRROR: EMAIL ALREADY IN USE!\')</script>';
return;
}
if ($phone_amount > 0) {
echo '<script>showError(\'ERRROR: PHONE ALREADY IN USE!\')</script>';
return;
}
在进行此查询之前,我必须进行另一次查询以创建用户的唯一ID。我正在为此使用此代码:
$id = $connection->query('SELECT id FROM users ORDER BY id DESC');
$id = $id->fetch_assoc()['id'] + 1;
最后但并非最不重要的一点是,要连接到数据库,我使用以下代码(它位于public_html
之外的另一个文件中。我在上面进行查询的函数中使用了require_once
):
<?php
function db_connect() {
static $connection;
if(!isset($connection)) {
$config = parse_ini_file('config.ini');
$connection = mysqli_connect($config['host'],$config['username'],$config['password'],$config['dbname']);
}
if($connection === false) {
return mysqli_connect_error();
}
return $connection;
}
$connection = db_connect();
if ($connection->connect_error) {
die("Connection failed: " . $connection->connect_error);
}
?>
因此,在经历了所有这些背景之后,实际的问题是:有没有更好的方法来检查数据库中是否还没有数据?
如有需要,我愿意提供任何附加信息。
谢谢。
答案 0 :(得分:1)
当您需要通过电子邮件或其他列创建唯一条目时,最好的方法是在此列上创建唯一索引。
ALTER TABLE <table_name> ADD UNIQUE INDEX <index_name>;
为什么这样更好: 在您的代码中,您可以获取竞争条件,例如同时有2个或更多请求会在您的表中产生重复项。