Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一个查询、一个表、两个计数()_Php_Mysql - Fatal编程技术网

Php 一个查询、一个表、两个计数()

Php 一个查询、一个表、两个计数(),php,mysql,Php,Mysql,我想检查我的注册脚本中是否包含用户名和电子邮件 以下是我使用查询进行检查的方式: $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(

我想检查我的注册脚本中是否包含用户名和电子邮件

以下是我使用查询进行检查的方式:

$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.";
} 

因此,它将减少代码,而不是两次连接同一个表并第二次执行、获取。

您只需执行联合所有即可联合这些查询:

SELECT COUNT(email) AS num FROM members WHERE email = :email
UNION ALL
SELECT COUNT(username) AS num FROM members WHERE username = :username
然后根据行提取2个

或者,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

是的,考虑不要做代码> CONTUTE()/<代码>,因为您不需要对所有行进行计数。如果你只找到一个,你只需要停下来。因此,您可以执行

限制
如果存在()

您只需执行
联合所有
即可联合这些查询:

SELECT COUNT(email) AS num FROM members WHERE email = :email
UNION ALL
SELECT COUNT(username) AS num FROM members WHERE username = :username
然后根据行提取2个

或者,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

是的,考虑不要做代码> CONTUTE()/<代码>,因为您不需要对所有行进行计数。如果你只找到一个,你只需要停下来。因此,请执行

限制
如果存在()

您可以在删除计数之间的
后尝试此操作

   $check = "SELECT COUNT(username) AS uname , 
       COUNT(email) AS uemail FROM members 
       WHERE (username = :username OR email = :email)";

您可以在删除计数之间的
后尝试此操作

   $check = "SELECT COUNT(username) AS uname , 
       COUNT(email) AS uemail FROM members 
       WHERE (username = :username OR email = :email)";

我不认为你真的需要数数。假设您想检查用户名或电子邮件是否已经存在,因为它们在您的用户表上必须是唯一的,您可以执行以下操作:

首先,为数据库中的每一列添加一个唯一的索引。您可能已经有了这些值,但如果您希望这些值是唯一的,这将确保即使您的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.";
    } 
}

我不认为你真的需要数数。假设您想检查用户名或电子邮件是否已经存在,因为它们在您的用户表上必须是唯一的,您可以执行以下操作:

首先,为数据库中的每一列添加一个唯一的索引。您可能已经有了这些值,但如果您希望这些值是唯一的,这将确保即使您的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.";
    } 
}

其中(用户名=usrrname或电子邮件=电子邮件)。。tryAs你可以在我的帖子中看到,我试过了,先生:)没有一点区别在一个括号中添加两个子句作为普通的选择列表你通过comas
SELECT COUNT(username)作为numu,COUNT(email)作为nume从…
@devpro,对不起,我的错。这一次,它告诉我电子邮件和用户名都存在,而它们只有一个存在。@特里斯坦,谢谢,修复了那个部分其中(用户名=usrrname或电子邮件=电子邮件)。。tryAs你可以在我的帖子中看到,我试过了,先生:)没有一点区别在一个括号中添加两个子句作为普通的选择列表你通过comas
SELECT COUNT(username)作为numu,COUNT(email)作为nume从…
@devpro,对不起,我的错。这一次,它告诉我电子邮件和用户名都存在,而它们只有一个存在。@特里斯坦,谢谢,修复了那个部分这一次,它告诉我用户名和电子邮件都存在于数据库中,而只有一个存在。这一次,它告诉我用户名和电子邮件都存在于数据库中,而只有一个存在。我尝试了代码的第二块,它实际上搜索了两行结果,效果很好。所以我写这句话是为了将来的学习者。同样感谢
LIMIT
tip。我尝试了代码的第二个块,它实际上是在两行中搜索结果,而且效果很好。所以我写这句话是为了将来的学习者。同样感谢
LIMIT
tip.+1,但需要注意的是:当您在DB中进行比较时,您可能正在使用通常的CI排序规则,因此'Alex'='Alex'将计算为true,而PHP中的比较是二进制的。因此,您必须在PHP中解决这个问题,并确保算法与DB.+1中的排序规则相匹配,但需要注意的是:当您在DB中进行比较时,您可能正在使用通常的CI排序规则,因此'Alex'='Alex'将计算为true,而不是PHP,其中比较是二进制的。因此,您必须在PHP中处理这个问题,并确保算法与数据库中的排序规则相匹配。