#php #mysql #database
#php #mysql #База данных
Вопрос:
Я пытаюсь создать класс для своей базы данных: структура класса, как показано ниже
<?php
require_once("config.php"); // include(Username, passowrd, server and databaseName)
class MySQLDatabase{
private $connection;
function __construct(){
$this->openConnection();
}
public function openConnection(){
$this->$connection = mysqli_connect(DB_SERVER, DB_USER, DB_PWD, DB_NAME);
if(!$connection){
die("Database connection failed: ".mysql_error);
}
}
}
$database = new MySQLDatabase();
$db =amp;$database;
?>
тогда моим первым шагом было проверить, работает эта погода или нет. поэтому я кодирую index.php файл, как показано ниже
<?php
require("../includes/database.php"); if(isset($database)){
echo "true";
}else{
echo "false";
}
?>
после этого я запускаю программу и получаю ошибки, как показано ниже. Я не могу понять причину. Я гуглю это, и для этого нет четкого решения. может ли кто-нибудь помочь мне понять, почему это происходит и как это решить?
( ! ) Обратите внимание: неопределенная переменная: соединение в C:wampwwwwaytoitsincludesdatabase.php
on line 9
Call Stack
# Time Memory Function Location
1 0.0005 240792 {main}( ) ..index.php:0
2 0.0008 249872 require( 'C:wampwwwwaytoitsincludesdatabase.php' ) ..index.php:3
3 0.0013 250528 MySQLDatabase->__construct( ) ..database.php:55
4 0.0013 250592 MySQLDatabase->openConnection( ) ..database.php:15
( ! ) Fatal error: Cannot access empty property in C:wampwwwwaytoitsincludesdatabase.php on line 9
Call Stack
# Time Memory Function Location
1 0.0005 240792 {main}( ) ..index.php:0
2 0.0008 249872 require( 'C:wampwwwwaytoitsincludesdatabase.php' ) ..index.php:3
3 0.0013 250528 MySQLDatabase->__construct( ) ..database.php:55
4 0.0013 250592 MySQLDatabase->openConnection( ) ..database.php:15
Комментарии:
1. В контексте этой функции это
if (!$this->connection)
не должно бытьif (!$connection)
2.
mysql_error
собирается выдавать уведомления о неопределенной константе. Вы имеете в виду использоватьmysqli_connect_error()
там для последней ошибки подключения, выданной mysqli php.net//manual/en/mysqli.connect-error.php
Ответ №1:
Вы используете $this->$connection
вместо $this->connection
. Удалите $
вход connection
и повторите попытку.
Ответ №2:
$this::$connection
(с $
сохранением) будет ссылаться на статическую переменную. Поскольку у вас есть переменная класса, вы должны получить к ней доступ через $this->connection
Также вам нужно использовать те же инструкции в вашем if
-statement .
Комментарии:
1. не понимаю, почему это принятый ответ, поскольку он не имеет ничего общего со статическими переменными. ответы @EmCo кажутся более подходящими
2. вы правы, я указал неправильный оператор. Для статических переменных это должно быть
$this::$connection
или лучшеself::$connection
. Я обновлю свой ответ.