PDO-使用用户名或电子邮件登录
PDO-Login with username or email
我正在尝试将以下语句转换为 PDO.But 我对 :username 和 :email 的绑定值感到困惑。
<?php
//$login is either username or email
$user = mysql_query("SELECT * FROM users WHERE (username = '$login' OR email = '$login') AND password = '$password'");
?>
上述声明的 PDO 版本 I tried.Here $login 是用户名或电子邮件。
<?php
//$login is either username or email
$query_usr = $this->db_connection->prepare("SELECT * FROM members WHERE username=:username OR email=:user_email) AND password = ':password'");
$query_usr->bindValue(':username', $login, PDO::PARAM_STR);
$query_usr->bindValue(':user_email', $login, PDO::PARAM_STR);
$query_usr->bindValue(':password', $password, PDO::PARAM_STR);
$query_usr->execute();
$query_usr_result_row = $query_usr->fetchObject();
?>
这有意义吗?
你得到的应该可以工作,但作为一个小的优化:
SELECT ... WHERE :login IN (username, email) AND password=:password
$query_usr->bindValue(':login', $login, PDO::PARAM_STR);
$query_usr->bindValue(':password', $password, PDO::PARAM_STR);
也可以。由于您正在对两个字段进行相同值的简单 OR
比较,因此上述构造允许您使用单个占位符并将其与相关字段同时进行比较。而不是必须绑定相同的值两次。
我正在尝试将以下语句转换为 PDO.But 我对 :username 和 :email 的绑定值感到困惑。
<?php
//$login is either username or email
$user = mysql_query("SELECT * FROM users WHERE (username = '$login' OR email = '$login') AND password = '$password'");
?>
上述声明的 PDO 版本 I tried.Here $login 是用户名或电子邮件。
<?php
//$login is either username or email
$query_usr = $this->db_connection->prepare("SELECT * FROM members WHERE username=:username OR email=:user_email) AND password = ':password'");
$query_usr->bindValue(':username', $login, PDO::PARAM_STR);
$query_usr->bindValue(':user_email', $login, PDO::PARAM_STR);
$query_usr->bindValue(':password', $password, PDO::PARAM_STR);
$query_usr->execute();
$query_usr_result_row = $query_usr->fetchObject();
?>
这有意义吗?
你得到的应该可以工作,但作为一个小的优化:
SELECT ... WHERE :login IN (username, email) AND password=:password
$query_usr->bindValue(':login', $login, PDO::PARAM_STR);
$query_usr->bindValue(':password', $password, PDO::PARAM_STR);
也可以。由于您正在对两个字段进行相同值的简单 OR
比较,因此上述构造允许您使用单个占位符并将其与相关字段同时进行比较。而不是必须绑定相同的值两次。