【问题标题】:How to check if user already exists in MySQL with PHP [duplicate]如何使用 PHP 检查用户是否已存在于 MySQL [重复]
【发布时间】:2013-07-02 04:11:35
【问题描述】:

我正在使用以下不适合我的代码。

$con=mysqli_connect("localhost","root","","my_db");
$check="SELECT COUNT(*) FROM persons WHERE Email = '$_POST[eMailTxt]'";
if (mysqli_query($con,$check)>=1)
{
    echo "User Already in Exists<br/>";
}
else
{
    $newUser="INSERT INTO persons(Email,FirstName,LastName,PassWord) values('$_POST[eMailTxt]','$_POST[NameTxt]','$_POST[LnameTxt]','$_POST[passWordTxt]')";
    if (mysqli_query($con,$newUser))
    {
        echo "You are now registered<br/>";
    }
    else
    {
        echo "Error adding user in database<br/>";
    }
}

类 mysqli_result 的对象无法转换为 int in C:\xampp\htdocs\Exp\welcome.php

【问题讨论】:

  • mysqli_query 应该返回一个结果集,其中一个元素将是列。它是您要检查的列的值是否大于或等于 1,而不是结果集本身。

标签: php mysql mysqli


【解决方案1】:

你可以试试下面的代码:

$query_code = "SELECT COUNT(itemCode) FROM masterData WHERE itemCode='{$itemCode}'";
$result_login = mysqli_query($conn,$query_code);
$anything_found = mysqli_num_rows($result_login);

if($anything_found > 0) {
    $formOk = false;
    echo "ITEM CODE ALREADY EXISTS! Please try again.";  
}

【讨论】:

  • 这永远是正确的。这个例子坏了!
【解决方案2】:

mysqli_query 函数返回一个结果集句柄。然后您需要从中读取行:

$rs = mysqli_query($con,$check);
$data = mysqli_fetch_array($rs, MYSQLI_NUM);
if($data[0] > 1) {
    //user exists;
}

另请注意,SELECT count(1) FROM ... 将比 SELECT count(*) FROM ... 更快,您不会在小表中看到太大的差异,但对于数十万行的大表,差异可能会很大。

【讨论】:

    【解决方案3】:

    这段代码很适合你...

    $con=mysqli_connect("localhost","root","","my_db");
    $check="SELECT * FROM persons WHERE Email = '$_POST[eMailTxt]'";
    $rs = mysqli_query($con,$check);
    $data = mysqli_fetch_array($rs, MYSQLI_NUM);
    if($data[0] > 1) {
        echo "User Already in Exists<br/>";
    }
    
    else
    {
        $newUser="INSERT INTO persons(Email,FirstName,LastName,PassWord) values('$_POST[eMailTxt]','$_POST[NameTxt]','$_POST[LnameTxt]','$_POST[passWordTxt]')";
        if (mysqli_query($con,$newUser))
        {
            echo "You are now registered<br/>";
        }
        else
        {
            echo "Error adding user in database<br/>";
        }
    }
    

    【讨论】:

    • 这可能会引起通知。如果没有找到记录,则数据不是数组。可以通过用 IF ($data = mysqli_fetch_array($rs, MYSQLI_NUM)) { 替换对 data 的分配和对 data[0] 的检查来修复
    • $_POST[eMailTxt] 应该是$_POST['eMailTxt']
    • 谢谢。如果通过编辑合并@Kickstart 评论,将获得 +1。
    【解决方案4】:

    mysqli_query 返回一个mysqli_result 对象。与其将其与整数进行比较,不如尝试使用num_rows

    $res = mysqli_query($con,$check);
    if($res->num_rows){
        //User exists
    }
    

    编辑:以上假设查询使用SELECT *,这不适用于SELECT COUNT(*)。查看 Aleks G 的答案。

    【讨论】:

    • 我同意基本错误,但他正在返回计数。即使没有找到与电子邮件地址匹配的记录,仍然会返回计数行(其中计数为 0)。
    • 这与他的查询不正确。 OP 的查询将始终返回 1 行,但他对该行中的值感兴趣。
    猜你喜欢
    • 2014-08-07
    • 2015-03-04
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-17
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多