我搜索了与我的问题类似的内容,而我使用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):
答案 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';
}