Я пытаюсь преобразовать систему входа, которая работает под PHP5x и MySQL tp PHP 7 и MySQLi.
Я продолжаю получать, что переменная соединения $mysqli не распознана в некоторых функциях в классе. Я прочитал много документации, безуспешно пробовал GLOBALS и global.
Вот код, который я использую:
<?php
include("constants.php");
class MySQLDB{
var $mysqli; //The MySQL database connection
var $num_active_users; //Number of active users viewing site
var $num_active_guests; //Number of active guests viewing site
/* Class constructor */
public function __construct(){
/* Make connection to database */
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME) or die(mysqli_error($mysqli));
$mysqli->select_db(DB_NAME) or die(mysqli_error($mysqli));
/* Calculate number of users at site */
$this->calcNumActiveUsers();
/* Calculate number of guests at site */
$this->calcNumActiveGuests();
}
public function MySQLDB(){
self::_construct();
}
function calcNumActiveUsers(){
$q = "SELECT * FROM ".TBL_ACTIVE_USERS;
$result = $mysqli->query($q);
$this->num_active_users = $result->num_rows;
}
function calcNumActiveGuests(){
$q = "SELECT * FROM ".TBL_ACTIVE_GUESTS;
$result = $mysqli->query($q);
$this->num_active_guests = $result->num_rows;
}
}
/* Create database connection */
$database = new MySQLDB;
?>
Я получаю следующее сообщение:
Notice: Undefined variable: mysqli in E:\$$DEVELOPMENT\HTDOCS\MySQL\ServXchange-PHP7-MySQLi\gestion\include\database-MySQLi-Work.php on line 33
Замените все свои $mysqli... на $this->mysqli. Вы должны использовать $this->mysqli как при получении, так и при установке, если хотите, чтобы переменная была доступна за пределами этой конкретной области.
Используйте $this, как описано выше, также я бы в этом случае использовал не var, а private. Что касается вашего calcNumActiveUsers или гостей, я бы сделал SELECT count(*) as qty FROM your_table, а затем вернул значение столбца qty, а не $num_rows.
?: «Похоже, вы пишете свой собственный ORM. Рассматривали ли вы возможность использования уже написанного, протестированного и широко поддерживаемого, например RedBeanPHP, Доктрина, Движение или Красноречивый?»
Если я поставлю это: $result = $this->$mysqli->query($q); Я получаю те же сообщения






Вам нужно научиться использовать
$thisв классах PHP. php.net/manual/en/language.oop5.basic.php