#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
, что это означает гораздо больше, но это краткое решение вашей непосредственной проблемы.