从mysql转换为PDO用户名确认问题

时间:2015-06-03 22:37:04

标签: php mysql post pdo

如何将此mysql转换为PDO?我在尝试获取代码以验证用户名是否已存在时遇到问题。

//Check if user already exists

$u_check = mysql_query("SELECT username FROM users WHERE username='$un'");

//Count the amount of rows where username = $un

$check = mysql_num_rows($u_check);



if ($check == 0) {

3 个答案:

答案 0 :(得分:3)

您可能希望使用prepared statement

执行此操作
$u_check = $pdo->prepare("SELECT username FROM users WHERE username= :username");
$u_check->execute(array(':username' => $un));
if($u_check->rowCount()) {

答案 1 :(得分:1)

我同意Machavity关于准备好的声明:

$u_check = $pdo->prepare("SELECT username FROM users WHERE username= :username");
$u_check->execute(array(':username' => $un));

但是对于所选行的便携式计数 ,您应该更喜欢:

$rows=$u_check->fetchAll();
if(count($rows)) {...

有关使用rowCount()进行选择查询的限制的详细信息,请参阅http://php.net/manual/en/pdostatement.rowcount.php(可移植性问题,取决于基础数据库)。

答案 2 :(得分:0)

始终使用正确的类型定义绑定PDO中的参数,以避免PDO预测类型过程。避免尽可能使用数组执行,因为这意味着预测PDO过程。

在获取之前使用PDO rowCount(比其他任何东西都快)。

$u_check = "SELECT username FROM users WHERE username=?"
$stmt = $pdo->prepare($u_check);
$stmt->bindParam(1, $un, PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
if($count>=1){
    $result= $stmt->fetchall(PDO::FETCH_ASSOC);
}