我有两个文件,一个包含reg_db类,在reg_db的其他i调用对象中。我希望它检查数据库中的用户输入和列,以确保它只是唯一的值。如果停止代码并不是唯一的消息。现在我什么都没得到,var_dump($ conn - > uniqueInput($ _ POST ['reg_username'],'username
'));输出NULL。
我希望代码是灵活的,我可以设置哪个用户输入来检查数据库中的哪一列。
//reg_db class
class reg_db{
private $input;
private $column;
public function __construct(){
}
public function uniqueInput($reg_input, $reg_column){
$this -> input = $reg_input;
$this -> column = $reg_column;
$pdo = new PDO('mysql:host=localhost;dbname=fail once again;', 'root', '');
$db_user = $pdo -> prepare('SELECT :column FROM `users` WHERE :column = :input');
$db_user -> bindParam(':input', $this -> input, PDO::PARAM_STR);
$db_user -> bindParam(':column', $this -> column, PDO::PARAM_STR);
$db_user -> execute();
$row = $db_user -> fetch(PDO::FETCH_ASSOC);
if($this -> input == $row[$this -> column]){
die($this -> column . ' ' . $this -> input . ' is already taken');
}
}
}
//object of reg_db
$conn = new reg_db();
$conn -> uniqueInput($_POST['reg_username'], '`username`');
答案 0 :(得分:0)
您可以通过用户名获取用户,并检查它是否不是您正在更新的用户。
class reg_db{
private $pdo;
public function __construct(){
$this->pdo = new PDO('mysql:host=localhost;dbname=fail once again;', 'root', '');
}
public function getUserBy($reg_column, $reg_input){
$db_user = $this->pdo->prepare("SELECT * FROM `users` WHERE `$reg_column` = :input");
$db_user->bindParam(':input', $reg_input, PDO::PARAM_STR);
$db_user->execute();
return $db_user->fetch(PDO::FETCH_OBJ);
}
}
$conn = new reg_db();
$user = $conn->getUserBy('username', $_POST['reg_username']);
if ($user && $user->id != $_POST['reg_id']) {
die("Username '{$_POST['reg_username']}' is already taken");
}