Php PDO-bindParam不工作

Php PDO-bindParam不工作,php,mysql,pdo,Php,Mysql,Pdo,我正在创建一个PDO类用于我的项目,但由于我是新手,所以我无法将参数绑定到准备好的sql语句,而不会出现任何错误。下面是要执行此操作的函数: # ::bindParam public static function bind() { # get function arguments $args = func_get_args(); # check for any arguments passed if (count($args) < 1) {

我正在创建一个PDO类用于我的项目,但由于我是新手,所以我无法将参数绑定到准备好的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');
    }
}
有人能给我指出正确的方向吗?此时查询不会产生错误。注意,我假设问题在这里,尽管可能不是,因为我只使用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;
    }

只要去掉这个函数,PDO已经有了它

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

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

$this->db->prepare('SELECT * FROM `users` WHERE `email` = :email AND `password` = :password LIMIT 1');
$stmt = $this->db->execute(array(':email'=> $email,':password' => $password));
$this->template->user = $this->db->fetch();
这就是您需要的所有代码(假设您的类的execute是一个常规的PDO execute)

或者,在原始PDO中制作:

$email = $_POST['email'];
$password = $_POST['password'];
$password = hash('sha256', $password);

$sql  = 'SELECT * FROM users WHERE email = ? AND password = ? LIMIT 1';
$stmt = $this->db->prepare($sql);
$stmt->execute(array($email, $password));
$this->template->user = $stmt->fetch();

因此,您的类似乎需要比原始PDO更多的代码。你确定你需要这门课吗

正如@YourCommonSense已经提到的,原始PDO接口更清晰一些,但是问题可能是由于使用了函数而不是

这两者之间的区别在于,第一个取a,它在
foreach
循环中不断被覆盖,而最后一个取变量的实际值



如果您正在寻找更友好的数据库连接界面,为什么不试试?

发布调用函数的代码您如何调用函数?检查更新的问题
公共静态函数
-为什么是静态的?您不需要(这样做),请参见此处:
$this->db->bind(…)
。此外,您的密码没有被篡改,请帮自己一个忙,并快速通读以了解其主要问题。此外:您需要提供错误消息。或者我只是读了一遍,没有注意到吗?如果我需要bindParam()上的其他可选参数怎么办?为什么要删除命名参数?“它们使绑定几乎不可能出错。”尤达举了个例子吗?我所知道的唯一问题是限制条款,这很容易解决。谢谢,PDO没有给我任何提示。我需要构建自己的掩码来使用PDO,以便扩展MVC体系结构中的模型。+1用于推荐一个框架,而不是“擦在一起生火”PDO解决方案。
$email = $_POST['email'];
$password = $_POST['password'];
$password = hash('sha256', $password);

$sql  = 'SELECT * FROM users WHERE email = ? AND password = ? LIMIT 1';
$stmt = $this->db->prepare($sql);
$stmt->execute(array($email, $password));
$this->template->user = $stmt->fetch();