Php 检查用户名是否存在PDO
我如何才能检查多个因素的组合,而不是检查每个因素?所以基本上我使用PDO,我必须确保用户名和电子邮件是唯一的。那我该怎么做呢?我见过Php 检查用户名是否存在PDO,php,mysql,pdo,Php,Mysql,Pdo,我如何才能检查多个因素的组合,而不是检查每个因素?所以基本上我使用PDO,我必须确保用户名和电子邮件是唯一的。那我该怎么做呢?我见过 if ( $sthandler->rowCount() > 0 ) { // do something here } 但是有没有更好的方法呢。还有,如果没有人能解释一下我是如何处理这个问题的 编辑 这是我输入数据库的查询代码 <?php try { $handler = new PDO('mysql:host=loc
if ( $sthandler->rowCount() > 0 ) {
// do something here
}
但是有没有更好的方法呢。还有,如果没有人能解释一下我是如何处理这个问题的
编辑
这是我输入数据库的查询代码
<?php
try {
$handler = new PDO('mysql:host=localhost;dbname=s','root', '*');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
exit($e->getMessage());
}
$name = $_POST['name'];
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$password1 = $_POST['passwordconf'];
$ip = $_SERVER['REMOTE_ADDR'];
//Verifcation
if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1))
{
echo "Complete all fields";
}
// Password match
if ($password != $password1)
{
echo $passmatch = "Passwords don't match";
}
// Email validation
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo $emailvalid = "Enter a valid email";
}
// Password length
if (strlen($password) <= 6){
echo $passlength = "Choose a password longer then 6 character";
}
function userExists($db, $user)
{
$userQuery = "SELECT * FROM userinfo u WHERE u.user=:user;";
$stmt = $db->prepare($userQuery);
$stmt->execute(array(':user' => $user));
return !!$stmt->fetch(PDO::FETCH_ASSOC);
}
$user = 'userName';
$exists = userExists($db, $user);
if(exists)
{
// user exists already.
}
else
{
// user doesn't exist already, you can savely insert him.
}
if(empty($passmatch) && empty($emailvalid) && empty($passlength)) {
//Securly insert into database
$sql = 'INSERT INTO userinfo (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)';
$query = $handler->prepare($sql);
$query->execute(array(
':name' => $name,
':username' => $username,
':email' => $email,
':password' => $password,
':ip' => $ip
));
}
?>
您显示的代码对于检查用户名和电子邮件是否唯一没有多大意义。您应该在数据库上设置唯一键。类似的操作应该可以:
<?php
//Connections
try {
$handler = new PDO('mysql:host=localhost;dbname=s','root', '*');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
exit($e->getMessage());
}
$name = $_POST['name'];
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$password1 = $_POST['passwordconf'];
$ip = $_SERVER['REMOTE_ADDR'];
//Verifcation
if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)){
$error = "Complete all fields";
}
// Password match
if ($password != $password1){
$error = "Passwords don't match";
}
// Email validation
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
$error = "Enter a valid email";
}
// Password length
if (strlen($password) <= 6){
$error = "Choose a password longer then 6 character";
}
if(!isset($error)){
//no error
$sthandler = $handler->prepare("SELECT username FROM users WHERE username = :name");
$sthandler->bindParam(':name', $username);
$sthandler->execute();
if($sthandler->rowCount() > 0){
echo "exists! cannot insert";
} else {
//Securly insert into database
$sql = 'INSERT INTO userinfo (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)';
$query = $handler->prepare($sql);
$query->execute(array(
':name' => $name,
':username' => $username,
':email' => $email,
':password' => $password,
':ip' => $ip
));
}
}else{
echo "error occured: ".$error;
exit();
}
function userExists($db, $user)
{
$userQuery = "SELECT * FROM userinfo u WHERE u.user=:user;";
$stmt = $db->prepare($userQuery);
$stmt->execute(array(':user' => $user));
return !!$stmt->fetch(PDO::FETCH_ASSOC);
}
$user = 'userName';
$exists = userExists($db, $user);
if(exists)
{
// user exists already.
}
else
{
// user doesn't exist already, you can savely insert him.
}
显示更多的代码。实际情况并非如此。确保输入有效后,我将其插入数据库。我仍将添加更多内容,为什么没有意义?您应该尝试进行INSERT
,如果数据已经存在,则检查错误。如果您想通过以下步骤来实现:1
检查是否有该用户名/电子邮件的条目2
如果没有,请插入-有时您可以在两个会话中同时获得两个条目(通常发生在用户快速提交表单两次的情况下),这样我就可以使用所有条目了吗?我还用更多的代码编辑了我的帖子哦,我明白你的意思了,我修改了你的代码,添加了logic@user3574362Hmm。似乎没有输入,现在没有输入到数据库,也没有回显错误消息Yes。我现在已经添加了完整的代码。以防万一,这可能是我没有表现出的导致问题的原因。现在效果很好。那电子邮件呢。我会对电子邮件做同样的事情吗?我真的不确定在代码中修改什么才能使它适用于我的代码。我有一个编辑,如果你能帮助我,那将是greatI想知道你是否试图理解它。您应该已经将用户更改为用户名,您应该能够理解这一点。