gpt4 book ai didi

php - 在插入 [mysql_errno()] 之前检查预先存在的记录的最快方法

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:11 25 4
gpt4 key购买 nike

我的问题将以电子邮件为例,但这可以适用于任何事物。


通常在注册新用户(包括插入他/她的电子邮件)之前,我会检查他/她的电子邮件是否已经存在于数据库中,如下所示:

$result = mysql_query("SELECT * FROM Users WHERE email = '".mysql_real_escape_string($email)"';");
if(!$result)
{
die(mysql_error());
}

if(mysql_num_rows($result) > 0)
{
die('<p>Email already in DB. <a....>Recover Email</a></p>');
}
else
{
//insert new user data into Users table
}

既然我已经将我的用户表中的 email 字段限制为 UNIQUE ,那么先尝试插入是否会更快,如果它失败了,检查错误?像这样:

$result = mysql_query(...);//insert new user data into Users table
if(!$result)
{
if(mysql_errno()==$insert_unique_error)
{
$error = '<p>Email already in DB. <a....>Recover Email</a></p>';
}
else
{
$error = mysql_error();
}
die($die_str);
}

问题是我不知道$insert_unique_error 应该是什么。这些是唯一的错误代码 I could find :

The first two characters of an SQLSTATE value indicate the error class:

Class = '00' indicates success.

Class = '01' indicates a warning.

Class = '02' indicates “not found.” This is relevant within the context of cursors and is used to control what happens when a cursor reaches the end of a data set. This condition also occurs for SELECT ... INTO var_list statements that retrieve no rows.

Class > '02' indicates an exception.

最佳答案

使用

INSERT IGNORE INTO Users VALUES(...);

在电子邮件字段上使用唯一键,然后使用 mysql_affected_rows() 检查行数;

这将导致对数据库的单个查询并排除 SELECT 和 INSERT 之间时间窗口的竞争条件

关于php - 在插入 [mysql_errno()] 之前检查预先存在的记录的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8911652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com