检查用户名是否存在(PDO)

时间:2018-07-29 15:12:47

标签: php mysql pdo

我搜索了与我的问题类似的内容,而我使用mysqli时,他们都使用了PDO。 (我不确定它们之间是否有所不同)

if(!empty($_POST['username']) && !empty($_POST['email']) && !empty($_POST['password'])):
    if (mysql_num_rows($check_username) != 0):
        echo "Username already exists";
    else:
        $stmt = $conn->prepare($registration_insert);
        $stmt->bindParam(':username', $_POST['username']);
        $stmt->bindParam(':email', $_POST['email']);
        $stmt->bindParam(':password', password_hash($_POST['password'], PASSWORD_BCRYPT));

        if( $stmt->execute() ):
            $message = 'Successfully created new user';
            else:
            $message = 'Sorry there must have been an issue creating your account';
        endif;
    endif;
endif;

$check_username的值为

SELECT * FROM users WHERE username='".$username."'"

此代码输出:

  

警告:mysql_num_rows()期望参数1为资源,在第15行的path:\ to \ my \ wesbite \ signup.php中给出的字符串

第15行=

if (mysql_num_rows($check_username) > != 0):

1 个答案:

答案 0 :(得分:0)

mysql_num_rows用于mysql_驱动程序。 PDO中的等效功能为http://php.net/manual/en/pdostatement.rowcount.php,但不适用于select s。

  

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能返回该语句返回的行数。但是,并非所有数据库都可以保证这种行为,便携式应用程序不应该依赖此行为。

执行select count(*)并使用返回的值来知道是否有/没有结果。还要参数化该查询。这是根据手册示例2进行的改编:

$stmt = $conn->prepare('SELECT count(*) FROM users WHERE username= ?');
$stmt->execute(array($username));
if($stmt->fetchColumn() > 0) {
     echo 'username already exists';
}