Я знаю, что проблема связана с первым параметром mysqli_query, но я не могу, чтобы жизнь меня определяла, какой именно параметр должен быть. Я могу заставить это работать с mysql_query, но я пытаюсь изучить OOP, а также преобразовать в mysqli. Я хотел бы иметь возможность вызвать соединение (и отключить в конце концов), когда оно мне понадобится, а затем выполнить запросы после его подключения. Любая помощь была бы фантастической.php class mysqli_query issue
database.php
class Database{
private $db_host = "localhost";
private $db_user = "root";
private $db_pass = "root";
private $db_name = "db";
public function __construct(){
$this->connect();
}
public function connect()
{
//If database is not connected, look to connect
if(!$this->con)
{
$myconn = mysqli_connect($this->db_host,$this->db_user,$this->db_pass);
//If database is connected, select table
if($myconn)
{
$seldb = mysqli_select_db($this->db_name,$myconn);
//If database is selected, return conn
if($seldb)
{
$this->con = true;
return true;
} else
{
return false;
}
} else
{
return false;
}
} else
{
return true;
}
}
public function disconnect()
{
if($this->con)
{
if(mysqli_close())
{
$this->con = false;
return true;
}
else
{
return false;
}
}
}
}
school.php
require_once('database.php');
class Schools{
public function __construct()
{
$connection = new Database();
$this->getAllSchools();
}
public function getAllSchools($connection){
$schoolsql = "SELECT SID, schoolName, schoolCity, schoolCountry, schoolRegion FROM schools ORDER BY SID";
$schoolquery = mysqli_query($connection->con, $schoolsql);
$results = array();
while($row = mysqli_fetch_array($schoolquery))
{
$results[] = array(
'id' => $row['SID'],
'name' => $row['schoolName'],
'city' => $row['schoolCity'],
'country' => $row['schoolCountry'],
'region' => $row['schoolRegion']
);
}
$json = json_encode($results);
echo $json;
}
}
$school = new Schools;
Я знаю, что это, где все это терпит неудачу. $ schoolquery = mysqli_query ($ connection-> con, $ schoolql);
Я просто не знаю, какая перестановка переменной соединения mysqli действительно ожидает от класса Database?
Этот набор кодов «работает». Я знаю, что это проблемы безопасности, но сейчас, когда я учусь, я просто пытаюсь получить результат из базы данных, которую я ожидаю, но в конце концов структура кода не то, что я хочу. Я бы предпочел, чтобы файл database.php содержал класс, который я могу создать в файле schools.php. Сейчас он просто создает соединение, и я могу загрузить его в класс Schools. Я рассмотрел несколько проблем подключения класса mysqli на SO (и в Google) и попробовал несколько перестановок, но я не мог заставить параметр класса базы данных работать.
database.php
$db_host = "localhost";
$db_user = "root";
$db_pass = "root";
$db_name = "db";
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
schools.php
class Schools{
function __construct($mysqli){
$this->mysqli = $mysqli;
}
//Method to return all schools
function getAllSchools() {
$query = "SELECT SID, schoolName, schoolCity, schoolCountry, schoolRegion FROM schools ORDER BY SID ASC";
$results = array();
if ($result = $this->mysqli->query($query))
{
while ($row = $result->fetch_assoc()) {
$results[] = array(
'id' => $row['SID'],
'name' => $row['schoolName'],
'city' => $row['schoolCity'],
'country' => $row['schoolCountry'],
'region' => $row['schoolRegion']
);
}
$json = json_encode($results);
echo $json;
$result->close();
} else {
echo "No results";
}
}
//Method to return one school
function getASchool ($id) {
$query = "SELECT SID, schoolName, schoolCity, schoolCountry, schoolRegion FROM schools WHERE SID=$id";
$results = array();
if ($result = $this->mysqli->query($query))
{
while ($row = $result->fetch_assoc()) {
$results[] = array(
'id' => $row['SID'],
'name' => $row['schoolName'],
'city' => $row['schoolCity'],
'country' => $row['schoolCountry'],
'region' => $row['schoolRegion']
);
}
$json = json_encode($results);
echo $json;
$result->close();
} else {
echo "No results";
}
}
}
$school = new Schools($mysqli);
$school->getASchool("120");
Мы можем видеть '$ this-> db_host, $ this-> db_user ...', но где '$ this-> con'? –
'$ conn = mysqli_connect ($ servername, $ username, $ password, $ dbname);' мы не можем видеть, откуда пришли все эти переменные? Почему бы не использовать, например, '$ this-> db_user' и т. д. –