我需要帮助在PHP中的函数中使用类

时间:2015-06-22 23:23:21

标签: php mysql pdo mysqli

我试图将我的所有mysqli转换为PDO,但我对PDO非常环保并且我的问题可能是基本的。我在切换的第一个查询时遇到问题。

这是我的设置。在我的login.php中,我调用了这样的函数:

的login.php

log_ret[which(!is.finite(log_ret))] <- 0
log_ret
               x      y z s     p t
2005-01-01 0.234 -0.012 0 0 0.454 0

我的功能页面加载了这个:

funcs.php

$user = attempt_login($username, $password);

然后引用给我所有错误的函数:

function attempt_login($username, $password) {
    $user = find_user_by_username($username);
    if ($user) {
        if (password_check($password, $user["salt"], $user["password"])) {
    ...
}

和我的班级一起开始:

db_connection.php

function find_user_by_username($username) {
    $db = new Database();
    $db->dbc();
    $sql = "SELECT * FROM users WHERE username = :usr";
    $stmt = $db->prepare($sql);               // *** this is line 157 
    $stmt->bindParam('usr', $username, PDO::PARAM_STR);
    $stmt->execute();
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    return $result; 
}

数据库可以连接。我只是不想在我的函数中使用Globals,但我觉得错误意味着我在我的函数页面中需要一些globabls。这是错误:

class Database 
{
    private $dbc;

    public function __construct()
    {
        try {
            $db_host = ' ';     //  hostname
            $db_name = ' ';     //  databasename
            $db_user = ' ';     //  username
            $db_pass = ' ';     //  password

            $dbc = new PDO('mysql:host='.$db_host.'; dbname='.$db_name, $db_user, $db_pass);  
            $dbc->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 
        }
        catch (PDOException $err) {  
            $err->getMessage();
        }
    }

    public function dbc()
    {
        return $this->dbc;
    }

}

我的问题是,如果我把所有的功能都放在课堂上,或者我只是遗漏了一些简单的东西,我这样做是错误的吗?同样,我只想在我的函数中使用PDO并避免使用全局变量。

1 个答案:

答案 0 :(得分:0)

$db->dbc();

这没有任何效果,因为您没有将返回值存储在变量中,然后使用此变量来调用prepare()。
您也不是将PDO对象存储在成员变量中,而是存储在构造函数方法中的局部变量中 - &gt;当构造函数存在时,它超出范围 由于你的数据库类什么都不做,只是将一些参数传递给PDO的构造函数 - 它没有冒犯 - 没用;并且班级&#34;没有&#34;顾名思义。我建议在这里使用dependency injection