Возникли проблемы с получением функции класса PHP для использования другой функции в классе

#php #mysql #oop #pdo

#php #mysql #ооп #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. потому что функция в классе является методом класса, в отличие от глобально доступной функции. Вы должны получить к ней доступ как $this-> SQLConnect()

2. Спасибо! Я попробовал это, и это сработало отлично.

3. Я опубликовал ответ, чтобы вы могли его принять

Ответ №1:

 $db_connect = SQLConnect(); 
 

должно быть

 $db_connect = $this->SQLConnect(); 
 

потому что функции внутри класса являются методами класса и недоступны глобально. Использование $this-> указывает PHP найти метод внутри класса. Следует отметить $this , что это означает гораздо больше, но это краткое решение вашей непосредственной проблемы.