【发布时间】:2017-10-19 05:11:30
【问题描述】:
我的注册表有问题。我的表单可以正常工作,但是每当我尝试插入已经存在的用户名时,它都不会显示任何错误。
这是我的 php 注册文件:
<?php
$servername = "localhost";
$username = "root";
$password = "";
try {
$conn = new PDO("mysql:host=$servername;dbname=dblogin", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
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{
$insert = $conn->prepare("INSERT INTO users (user_name,user_email,user_pass) values(:user_name,:user_email,:user_pass)");
$insert->bindparam(':user_name',$user_name);
$insert->bindparam(':user_email',$user_email);
$insert->bindparam(':user_pass',$hash);
$insert->execute();
}
}
catch(PDOException $e)
{
echo "connection failed";
}
?>
感谢您的支持
【问题讨论】:
-
你在 if 语句中错过了 1 } if (isset($_POST['submit'])) { if($stmt->rowCount() > 0){ echo "exists!"; } }
-
您的代码格式有点偏离,因此很难看到,但看起来
try块缺少},因此会导致解析错误。ini_set('display_errors',1);和error_reporting(E_ALL);会告诉你这个 -
另外你的第一个 stmt 有错字:$con 而不是 $conn。
-
一个建议:不要使用
rowCount(),因为它不太可靠 - 请参阅PDOStatement::rowCount 的“描述”部分。使用PDOStatement::fetch 并检查结果是否为 FALSE。如果为 FALSE,则未找到任何记录。否则它包含获取的记录。或者,作为fetch()的替代方案,使用query(),如PDOStatement::rowCount 中的“示例#2”。 -
另一个建议:不要使用
setAttribute(),而是将驱动程序选项数组作为最后一个参数传递给$conn = new PDO(...);。为什么?阅读Connections and Connection management中“示例#4”之后的“注释”。
标签: php pdo registration