一个查询,一个表,两个数()
我想检查用户名和电子邮件是否在我的注册脚本中。一个查询,一个表,两个数()
这是我如何检查与查询:
$emailcheck = "SELECT COUNT(email) AS nume FROM members WHERE email = :email";
//bindValue
//execute
//fetch
if($rowe['nume'] > 0){
$errors[] = "E-mail exist.";
}
而且也是我在做同样的事情的用户名;
$usercheck = "SELECT COUNT(username) AS numu FROM members WHERE username = :username";
//bindValue
//execute
//fetch
if($rowu['numu'] > 0){
$errors[] = "Username taken.";
}
*
我想往前走一步,并处理所有的东西用一个查询。
但我不能想出这样的问题。
我想:
$check = "SELECT COUNT(username) AS numu and COUNT(email) AS nume FROM members WHERE username = :username OR email = :email";
,但可能这是荒谬的。
如何处理我想要的一个查询?
后,我要检查这样的:
if($row['numu'] > 0){
$errors[] = "Username taken.";
}
if($rowe['nume'] > 0){
$errors[] = "E-mail exist.";
}
因此,这将是更少的代码,而不是为第二次两次bindValue, execute, fetch
连接相同的表。
你可以做Union All
联合这些查询:
SELECT COUNT(email) AS num FROM members WHERE email = :email
UNION ALL
SELECT COUNT(username) AS num FROM members WHERE username = :username
然后提取2个根据行。
OR,MySQL允许这事
SELECT
(SELECT COUNT(email) FROM members WHERE email = :email) as nume,
(SELECT COUNT(username) FROM members WHERE username = :username) as numu
,如果你想1行2列。
只有当您需要查看哪一个已经存在时才这样做。否则,只是这样做:
SELECT 1 FROM members WHERE email = :email OR username = :username LIMIT 1
是的,可以考虑不做count()
因为你并不需要计算所有行。你只需要停下来,如果你找到一个。因此,要么做一个LIMIT
或IF EXISTS()
我尝试了第二块代码,它实际上搜索结果所以我为未来的学习者写这篇文章,还要感谢'LIMIT'的提示 – LetsSeo
你可以指望之间取出and
后尝试这种
$check = "SELECT COUNT(username) AS uname ,
COUNT(email) AS uemail FROM members
WHERE (username = :username OR email = :email)";
这看起来和他已经试过的不一样吗? – RiggsFolly
这次它告诉我用户名和电子邮件存在于d atabase,当它们中只有一个存在时。 – LetsSeo
我不认为你真的需要计数。假设您想检查用户名或电子邮件是否已存在,因为它们必须在您的用户表上唯一,您可以这样做:
首先,为数据库中的每个列添加唯一索引。你可能已经有了这个,但是如果你希望这些值是唯一的,这将确保即使你的PHP代码由于某种原因不能这样做。
然后你可以使用此查询:
SELECT username, email FROM members WHERE username = :username OR email = :email
这将返回零,一排或两排,其中:
- 0 =既不是用户名,也没有电子邮件发现
- 1 =发现有一行有用户名,电子邮件或两者都有
- 2 =在一行中发现用户名,在另一行中找到电子邮件
然后,您可以遍历结果,将它们与用户输入进行比较,并设置错误。
while ($row = //fetch) {
if ($row['username'] == $username) {
$errors[] = "Username taken.";
}
if ($row['email'] == $email) {
$errors[] = "E-mail exist.";
}
}
+1,但需要一些提及:当你在数据库中进行比较时,你可能正在使用通常的CI整理,所以'Alex'='alex'将评估为true,与PHP相反,比较是二进制。因此,你必须在PHP中处理这个问题,并确保算法与数据库中的排序规则匹配。 – AlexanderMP
凡(用户名= usrrname或电子邮件=电子邮件)..尝试 – devpro
正如你可以看到有我的帖子,我试了一下,先生:) – LetsSeo
不小的差别在一个支架 – devpro