我一直想知道如果在注册期间用户名和/或电子邮件是重复的,如何签入MySQL表.这是我到目前为止所尝试的但无济于事:
$username = $_POST['username'];
$sq = $db->exec("SELECT * FROM `users` WHERE `username` = '$username'");
if ($sq->rowCount() > 0)
{
$msg = "That username is already taken.";
$error = true;
}
$email = $_POST['email'];
$sq = $db->exec("SELECT * FROM `users` WHERE `email` = '$email'");
if ($sq->rowCount > 0)
{
$msg = "That email is already taken.";
$error = true;
}
if (!error)
{
//add to db
}
Run Code Online (Sandbox Code Playgroud)
这给出的错误是 Call to a member function rowCount() on a non-object
能否请你帮忙?
PDO::exec()返回一个整数,所以你的上面的代码将死于致命的错误call to member function rowCount() on a non-object.你应该做的是SELECT COUNT(*)获得行数.
您还可以使用异常来帮助进行错误处理.
像这样:
// Ensure PDO will throw exceptions on error
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Turn emulated prepares off
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
try {
// Check if username is taken
$stmt = $db->prepare("SELECT COUNT(*) FROM `users` WHERE `username` = :username");
$stmt->execute(array('username' => $_POST['username']));
if ($stmt->fetchColumn() > 0) {
throw new Exception("That username is already taken.");
}
// Check if email is taken
$stmt = $db->prepare("SELECT COUNT(*) FROM `users` WHERE `email` = :email");
$stmt->execute(array('email' => $_POST['email']));
if ($stmt->fetchColumn() > 0) {
throw new Exception("That email is already taken.");
}
// Username and email are free
} catch (PDOException $e) {
// A database error occured
} catch (Exception $e) {
// Either the username of email is taken
}
Run Code Online (Sandbox Code Playgroud)
如果列中的数据应该是唯一的,则它应该具有唯一索引以防止重复插入,并加快基于该列的值进行搜索的查询.