【发布时间】:2019-03-19 05:03:20
【问题描述】:
我在编写一个使用 PDO 连接到数据库的简单类时遇到了一点问题。
问题是 PDOStatement::bindParam 在循环中的第一次调用后不起作用,我的意思是如果我有两个参数要给 PDOStatement 查询不会返回 rignt 结果,而是如果我只给出一个参数它给出了正确的结果。
代码如下:
public function query($sql, $params = NULL) {
// Opens the PDO connection
$this->open();
$this->stmt = $this->pdo->prepare($sql);
if (isset($params)) {
foreach ($params as $key => $value) {
// This doesn't work after the second cicle.
$this->stmt->bindParam(':' . $key, $value);
}
}
$result = NULL;
if (!$this->stmt->execute()) {
$result = false;
} else {
$result = $this->stmt->fetchAll();
}
// Closes the PDO connection
$this->close();
return $result;
}
这是 PDOStatement::debugDumpParams:
SQL: [114]
SELECT 1
FROM users
WHERE EXISTS
(
SELECT *
FROM users
WHERE username = :username
AND password = :password) limit 1
PARAMS: 2
KEY:NAME: [9] :username paramno=0 NAME=[9] ":username" is_param=1 param_type=2
KEY:NAME: [9] :password paramno=1 NAME=[9] ":password" is_param=1 param_type=2
感谢您的帮助!
【问题讨论】:
-
你在其他表上试过了吗?至于使用它来匹配用户名和密码,你真的应该考虑使用
password_hash() -
@NigelRen 我正在使用 md5() 函数和盐字符串来散列然后存储密码,这还不够吗?是的,我已经在其他桌子上试过了
-
好的,我发现了问题。我使用 PDOStatement::bindValue 而不是 bindParam 修复了它。
标签: php sql pdo pdostatement