gpt4 book ai didi

php - PDO - bindParam 不工作

转载 作者:可可西里 更新时间:2023-11-01 07:12:37 28 4
gpt4 key购买 nike

我正在创建一个 PDO 类以用于我的项目,但由于我是新手,所以我无法将参数绑定(bind)到准备好的 sql 语句,而不会出现任何错误。这是执行此操作的功能:

# ::bindParam
public static function bind()
{
# get function arguments
$args = func_get_args();

# check for any arguments passed
if (count($args) < 1)
{
return false;
}

foreach ($args as $params)
{
# named variables for convenience
$parameter = $params[0];
$variable = $params[1];
$data_type = isset($params[2]) ? $params[2] : PDO::PARAM_STR;
$length = isset($params[3]) ? $params[3] : null;

# bind param to query
Database::$statement->bindParam($parameter, $variable, $data_type, $length) or die('error');
}
}

和准备好的sql语句:

SELECT * FROM `users` WHERE `email` = :email AND `password` = :password LIMIT 1

有人能指出我正确的方向吗?此时查询不会产生任何错误。请注意,我假设问题就在这里,尽管它可能不是,因为我只使用 bindParam() 和 prepare()。

编辑 - 触发代码

    $email = $_POST['email'];
$password = $_POST['password'];

$password = hash('sha256', $password);

$this->db->prepare('SELECT * FROM `users` WHERE `email` = :email AND `password` = :password LIMIT 1');
$this->db->bind(
array(':email', $email),
array(':password', $password)
);
$status = $this->db->execute();

if ($status)
{
$result = $this->db->fetch('assoc');

$this->template->user = $result;
}
else
{
$this->template->user = false;
}

最佳答案

正如@YourCommonSense 已经提到的,原始 PDO 接口(interface)更清晰一些,但问题可能是由于使用了函数 PDOStatement::bindParam()。而不是 PDOStatement::bindValue() .

这两者之间的区别在于,第一个需要一个 variable reference ,它在您的 foreach 循环中不断被覆盖,而最后一个采用变量的实际值。


如果你正在寻找一些更友好的数据库连接界面,你为什么不试试Doctrine DBAL

关于php - PDO - bindParam 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16218797/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com