PHP检查SQL条目是否存在并生成不同的输出
我不熟悉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
$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();