我的注册表单有问题。我的表单工作正常,但每当我尝试插入已存在的用户名时,它都不会显示任何错误。
这是我的php注册文件:
{{1}}
感谢您的支持
答案 0 :(得分:0)
您没有执行select语句。你需要绑定params并执行select语句,在select statemnt之后尝试这个。
VALUES('Best Day'[Date])
答案 1 :(得分:0)
public function usernameCheck($username)
{
$sql = "SELECT * FROM $this->table where username = :username";
$query = $this->pdo->prepare($sql);
$query->bindValue(':username', $username);
$query->execute();
if ($query->rowCount() > 0) {
return true;
} else {
return false;
}
}
在你的项目中使用这个希望它可以工作......:)
答案 2 :(得分:0)
missing}
if (isset($_POST['submit'])) {
$user_name = $_POST['user_name'];
$user_email = $_POST['user_email'];
$user_pass = $_POST['user_pass'];
$hash = password_hash($user_pass, PASSWORD_DEFAULT);
$stmt = $con->prepare("SELECT user_name FROM users WHERE user_name = :user_name");
if($stmt->rowCount() > 0){
echo "exists!";
}
}else{
}
答案 3 :(得分:0)
我注意到4件事(其他人已经提到了2件):
第一个也是最小的是你有拼写错误($ con而不是$ conn) - 不要担心它发生在我们最好的人身上 - 在你的第一个$ stmt查询中,这意味着你的select-results变为NULL而不是0 - 所以你rowCount发现它没有超过0并继续前进而没有你的错误信息
其次,您忘记绑定并执行第一个$ stmt查询中的参数,这会为您的rowCount结果提供相同的结果
即使在使用预准备语句时,第三个总是清理变量 - 至少使用
$conn->mysql_real_escape_string($variable);
你可以有利地使用
htmlspecialchars($variable);
第四,因为你没有对数据库做任何事情(除了看),你可以简单地写一下简化你的代码:
$stmt = $conn->query("SELECT user_name FROM users WHERE user_name = '$user_name' LIMIT 1")->fetch();
正如我所说 - 无需在第一个查询中绑定或执行
并且作为一般规则 - 不要使用rowCount - 永远 - 如果你必须知道结果的数量(并且在99%的情况下你不知道)使用count();但如果你在这里只是想知道是否找到任何东西而是使用:
if ( $stmt ) {
echo "exists!";
} else {
// insert new user as you did
}
修改强>
另外 - 作为附注 - 在最初创建连接时,您应该考虑以下几点......
例如:
// Set variables
$servername = "localhost";
$username = "***";
$password = "***";
$database = "***";
$charset = 'utf8'; // It is always a good idea to also set the character-set
// Always create the connection before you create the new PDO
$dsn = "mysql:host=$servername;dbname=$database;charset=$charset";
// Set default handlings as you create the new PDO instead of after
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // And add default fetch_mode
PDO::ATTR_EMULATE_PREPARES => false, // And ALWAYS set emulate_prepares to false
];
// And now you are ready to create your new PDO
$conn = new PDO($dsn, $username, $password, $opt);
只是一个建议......快乐的小径