在获取PHP类函数时无法在类中使用其他函数

时间:2014-06-21 02:26:54

标签: php mysql oop pdo

在我的PHP文件中,我有一个包含所有函数的类,我正在使用此类与另一个文件进行交互。这是我正在使用的代码:

    public function check_user_exists ($username_original) {
    try {
        $db_connect = SQLConnect(); // Make the PDO handle usable

        // Prepare and fetch the id of the user trying to login, used to validate whether the user exists or not
        $db_interact = $db_connect->prepare("SELECT `id` FROM `users` WHERE `username_raw` = :username_raw");
        $db_interact->bindParam(":username_raw", $username_original);
        $db_interact->setFetchMode(PDO::FETCH_ASSOC);
        $db_interact->execute();
        $db_fetch = $db_interact->fetch();

        if ($db_fetch == false) {    
            return false;
        } else {
            global $validation_code;
            $validation_code = $db_fetch["id"];// Used to log the id of the use0r logging in
            return true;
        }
    } catch (PDOException $e) {
        echo $e->getMessage; // Used if something goes wrong with the PDO statement
    }
}

这是一个使用PDO检查数据库中是否存在用户的简单函数。

正如您在第三行代码中所看到的,该函数引用了SQLConnect()。当我使用函数check_user_exists()时,它给了我一个致命的错误,说我调用了一个未定义的函数,除了SQLConnect()在同一个文件中,并且是相同的PHP类。

这是SQLConnect()

    // Function to allow database interactions
public function SQLConnect () {
    // Database connection variables
    $host = "localhost";
    $dbname = "dropbox-database";
    $user = "root";
    $password = "password";
    // Set connect to null
    static $connect = null;

    if (is_null($connect)) {
        try {
            // Database connection variables
            $host = "localhost";
            $dbname = "dropbox-database";
            $user = "root";
            $password = "ethan17458";
            // Initiate connection
            $connect = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
            // Set error mode
            $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        } catch (PDOException $e) {
            // If there is an error, echo error message
            echo $e->getMessage();
        }
        // Make $connect usable
        return $connect;
    }
}

我正在使用此功能使用PDO打开数据库连接。

当两个函数在同一个文件中并且在同一个类中时,为什么会触发致命错误?我该如何解决这个问题?

谢谢,

1 个答案:

答案 0 :(得分:0)

$db_connect = SQLConnect(); 

应该是

$db_connect = $this->SQLConnect(); 

因为类中的函数是类的方法而不是全局可访问的。使用$ this->告诉PHP在类中定位方法。应该注意$this意味着更多,但这是对您当前问题的简洁修复。