我搜索了一些与我的问题类似的东西,当我使用PDO
时,他们都使用了mysqli
。(我不确定他们之间是否不同(
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行的路径:\to\my\wesbit\signup.php中给定
第15行=
if (mysql_num_rows($check_username) > != 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';
}