Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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检查SQL条目是否存在并生成不同的输出_Php_Mysql - Fatal编程技术网

PHP检查SQL条目是否存在并生成不同的输出

PHP检查SQL条目是否存在并生成不同的输出,php,mysql,Php,Mysql,我不熟悉PHP/SQL和通用服务器端脚本 我有以下代码: $username = $_POST['username']; $password = crypt($_POST['password']); $emailAddress = $_POST['emailAddress']; $con = mysqli_connect($db_host, $db_user, $db_pass, $db_name); if (!$con) { die('Could not conn

我不熟悉PHP/SQL和通用服务器端脚本

我有以下代码:

$username = $_POST['username'];
$password = crypt($_POST['password']);
$emailAddress = $_POST['emailAddress'];

$con =  mysqli_connect($db_host, $db_user, $db_pass, $db_name);

    if (!$con) {
        die('Could not connect: ' . mysql_error());
    };

    if ($stmt = $con->prepare("SELECT * FROM Users WHERE Username=?")) {
        $stmt->bind_param("s", $username);
        if(!$stmt->execute()) {
            echo "This Username isn't taken!";
        } else {
            echo 'This Username is already taken!';
        };
        $stmt->close();
    };

$con->close();
我运行这段代码来检查用户是否在我的数据库中,但我遇到的问题是,即使用户名不在数据库中,它也会产生相同的输出。我怎样才能解决这个问题

如果可以修复我的代码,如果执行不成功/如果找不到用户名,我想运行:

if ($stmt = $con->prepare("INSERT INTO Users (Username, EmailAddress, ePassword) VALUES (?,?,?)")) {
    $stmt->bind_param("sss", $username, $emailAddress, $password);
    $stmt->execute();
    $stmt->close();
};
然后将用户添加到我的数据库

$username = $_POST['username'];
$password = crypt($_POST['password']);
$emailAddress = $_POST['emailAddress'];

$con =  mysqli_connect($db_host, $db_user, $db_pass, $db_name);

if (!$con) {
    die('Could not connect: ' . mysql_error());
};

$stmt = $con->prepare("SELECT * FROM Users WHERE EmailAddress=?");
$stmt->bind_param("s", $emailAddress);
$stmt->execute();
$stmt->store_result();

$emailCheck = $stmt->num_rows;

if($emailCheck > 0) {
    echo "Email Address in use";
} else {            
    $stmt = $con->prepare("SELECT * FROM Users WHERE Username=?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $stmt->store_result();

    $userCheck = $stmt->num_rows;
    if($userCheck > 0) {
        echo "Taken";
    } else {
        $stmt = $con->prepare("INSERT INTO Users (Username, EmailAddress, ePassword) VALUES (?,?,?)");
        $stmt->bind_param("sss", $username, $emailAddress, $password);
        $stmt->execute();
        $stmt->close();

        echo "Registered";
    };
    $stmt->close();
};
$con->close();

提前感谢您的帮助。

我认为您应该删除前后的
if语句

if ($stmt = $con->prepare("SELECT * FROM Users WHERE Username=?"))`
相反,请尝试以下方法:

//Preparing the query
$query = $link->prepare('SELECT * FROM users WHERE username = ?');
//Replacing the ? by $username , s representing that my parameter is a string
$query->bind_param('s', $username);

//Execting the query
$result = $query->execute();

我制作了一个小项目,从数据库中搜索并给出输出。。你可以试试看:)


所以我已经解决了我的问题,并且改变了我正在做的事情,现在我还要检查电子邮件地址是否在那里(即使它在数据库中被设置为唯一)


感谢您帮助我理解它

仅仅因为SELECT的执行成功并不意味着它实际上选择了一些记录。您应该明确地检查后者。
$username = $_POST['username'];
$password = crypt($_POST['password']);
$emailAddress = $_POST['emailAddress'];

$con =  mysqli_connect($db_host, $db_user, $db_pass, $db_name);

if (!$con) {
    die('Could not connect: ' . mysql_error());
};

$stmt = $con->prepare("SELECT * FROM Users WHERE EmailAddress=?");
$stmt->bind_param("s", $emailAddress);
$stmt->execute();
$stmt->store_result();

$emailCheck = $stmt->num_rows;

if($emailCheck > 0) {
    echo "Email Address in use";
} else {            
    $stmt = $con->prepare("SELECT * FROM Users WHERE Username=?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $stmt->store_result();

    $userCheck = $stmt->num_rows;
    if($userCheck > 0) {
        echo "Taken";
    } else {
        $stmt = $con->prepare("INSERT INTO Users (Username, EmailAddress, ePassword) VALUES (?,?,?)");
        $stmt->bind_param("sss", $username, $emailAddress, $password);
        $stmt->execute();
        $stmt->close();

        echo "Registered";
    };
    $stmt->close();
};
$con->close();