проблема с наследованием php

483
05 января 2017, 08:28

Я не очень знаком с php и сейчас делаю простую админку по видеоуроку, в самом начале возникли проблемы, код перечитывал уже десяток раз, все как на видео 1в1, но не получается сделать запрос к бд.

Код файла database.php

<?php 
class Database {
  private $host='localhost';
  private $user="admin";
  private $pass="12345";
  private $db="db2";
  function connectToDb() {
     if($conn = mysqli_connect($this->host, $this->user,$this->pass)) {
        if($db=mysqli_select_db($conn,$this->db)) {
        }
     }
  }
  function closeConnection() {
    mysqli_close();
  }
}
?>

Код файла select.php

<?php 
class Select extends Database{
  private $tabname;
  function __construct($tablename) {
    $this->connectToDb();
    $this->tabname = $tablename;
  }
  function getRecordById($id) {
     $query = "SELECT * FROM $this->tabname WHERE id = '$id'";
        if($sql=mysqli_query($query)){
            $data=mysqli_fetch_array();
        }
        return $data;
  }
  function getAllData() {
  }
}
?>

Выводит сообщение об ошибке:

Warning: mysqli_query() expects at least 2 parameters, 1 given in E:\OpenServer\domains\admin\models\select.php on line 12

У автора видео все работает отлично, подскажите пожалуйста почему я получаю ошибку?

Answer 1

Процедурный стиль

$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$result = mysqli_query($link, "SELECT Name FROM Table")

Объектно-ориентированный стиль который Вам нужен

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$result = $mysqli->query("SELECT Name FROM Table")

Документация

В вашем примере вы смешали Процедурный и Объектно-ориентированный стиль. Есть класс Database, так пусть у него в конструкторе или в функции connectToDb() будет создано подключенние к БД:

class Database {
    private $host = 'localhost';
    private $user = "admin";
    private $pass = "12345";
    private $db = "db2";
    protected $mysqliDB;
    function connectToDb() {
        $this->mysqliDB = new mysqli($this->host, $this->user, $this->pass, $this->db);
        /* проверка соединения */
        if ($this->mysqliDB->connect_errno) {
            printf("Не удалось подключиться: %s\n", $mysqli->connect_error);
            exit();
        }
    }
    function closeConnection() {
        $this->mysqliDB->close();
    }
}

Класс Select и его функция getRecordById

function getRecordById($id) {
    $query = "SELECT * FROM $this->tabname WHERE id = '$id'";
    if ($result = $this->mysqliDB->query($query)) {
        ....
    }
    return $data;
}
READ ALSO
Ошибка при выводе strpos() expects parameter 1 to be string, object given

Ошибка при выводе strpos() expects parameter 1 to be string, object given

При выводе значений появляется две ошибки:

368
Отдать страницу в &ldquo;.html&rdquo; Laravel 5.2

Отдать страницу в “.html” Laravel 5.2

Возможно ли как нибудь отдать такой адрес пользователю с содержимым ?

317
простейший select, но не все так просто(?)

простейший select, но не все так просто(?)

Нужно из этой тбл выташить значения, одной строкой, но в ДВУХ колонках:

368
Какой вариант лучше для реализации?

Какой вариант лучше для реализации?

Какой вариант лучше для реализации: статическими методами или через объект?

333