Php 使用PDO从MySQL表获取结果时遇到问题
我正在构建一个简单的登录系统。我遇到的问题是从数据库中获取密码散列 这就是我所拥有的:Php 使用PDO从MySQL表获取结果时遇到问题,php,mysql,Php,Mysql,我正在构建一个简单的登录系统。我遇到的问题是从数据库中获取密码散列 这就是我所拥有的: $statement = 'SELECT Pass FROM Emails WHERE Email = "?"'; $question = array($email); try { $DB->beginTransaction(); $preparedStatement = $DB->prepare($statement); $prepared
$statement = 'SELECT Pass FROM Emails WHERE Email = "?"';
$question = array($email);
try {
$DB->beginTransaction();
$preparedStatement = $DB->prepare($statement);
$preparedStatement->execute($question);
$resultArr = $preparedStatement->fetchAll();
print_r($resultArr);
$DB->commit();
} catch(\PDOException $ex) {
echo "Seriously bad error. ";
echo $ex->getMessage();
return false;
}
我的问题是$resultar
总是不包含任何元素
我知道SQL查询本身是有效的,因为我已经在MySQL中直接测试了它
我相信我必须使用预先准备好的语句,因为我要向MySQL发送用户输入,并且必须抵御简单的SQL注入攻击
我使用fetchAll()
来确保给定电子邮件只有一个结果。否则,将会有一个巨大的问题
我的错误是什么?只是为了清理这个极其多余的代码
$stmt = $DB->prepare('SELECT Pass FROM Emails WHERE Email = ?');
$stmt->execute(array($email));
$pass = $stmt->fetchColumn();
这三行就是运行查询并获得结果所需的全部内容
是的,问题就在于引用?马克
为了确保没有其他电子邮件,您应该在Mysql中使用唯一索引为什么
$question=array($email)代码>?为什么不干脆$question=$email代码>?是否可能重复删除周围的双引号?
$query = 'SELECT Pass FROM Emails WHERE Email = :email';
try {
$DB->beginTransaction();
$preparedStatement = $DB->prepare($query);
$preparedStatement->bindParam("email", $email, PDO::PARAM_STR);
$preparedStatement->execute();
$resultArr = $preparedStatement->fetchAll();
print_r($resultArr);
$DB->commit();
} catch(\PDOException $ex) {
echo "Seriously bad error. ";
echo $ex->getMessage();
return false;
}