OPP mysqli_query() ожидает два параметра…

#php #mysqli

#php #mysqli

Вопрос:

Я пытаюсь изучить объектно-ориентированное программирование. Проблема, с которой я сталкиваюсь, заключается в том, как добавить ссылку в mysqli_query() внутри класса.

В процедурном стиле я просто создаю переменную $ с деталями подключения, а затем использую ее внутри mysqli_query ($variable, $ sql) и т. Д.

В моем классе у меня есть функция connect(), которая подключается к базе данных и возвращает true, но как я могу использовать ее внутри моего mysqli_query(), пожалуйста? пожалуйста, посмотрите код здесь:

     <?php

class DB {
    protected $db_name = 'OOP_forum';
    protected $db_user = 'Marcel';
    protected $db_pass = *****;
    protected $db_host = 'localhost';


    public function connect() {

        $connection = mysqli_connect($this->db_host, $this->db_user, $this->db_pass);
        mysqli_select_db($connection, $this->db_name);

        return true;
    }

    public function processRowSet($rowSet, $singleRow = false)  {

        $resultArray = array();
        while($row = mysqli_fetch_assoc($rowSet)) {
            arraypush($resultArray, $row);
        }

          if($singleRow==true) {
              return $resultArray[0];
          }else {
                 return $resultArray; }
        }


      public function select ($table, $where, $column = '*')  {
          $sql = "SELECT $column FROM $table WHERE $where";
          $result = mysqli_query($sql);

              if(mysqli_num_row($result) == 1 ){
                 return $this->processRowSet($result, true);
               } else
                  { return $this->processsRowSet($result);
             }
          }



      public function update ($data, $table, $where)    {

                      foreach ($data as $column->$value) {

                          $sql = "UPDATE $table SET $column = $value WHERE $where";
                          mysqli_query($sql) or die(mysqli_error());
                             }
                          return true;
                      } 

      public function delete ($table, $column, $where)  {
          $sql = "DELETE FROM $table WHERE $column = $where";

              if (query($sql)=== TRUE) {
              echo "Record Deleted sucessfully";
          }else {
              echo "Error deleting record: " . $connection->error;
          }

      }               

      public function insert($data, $table)  {

             $columns = "";
             $values = "";

             foreach ($data as $column->$value) {

                 $columns .= ($columns == "") ? "": ", " ;
                 $columns .= $column;
                 $values .= ($values == "") ? "" : ", ";
                 $values .= $value;
                    }


             $sql = "insert into $table ($columns) values ($values)";
             mysqli_query($sql) or die(mysqli_error());

             return mysqli_insert_id();
              }      

          } 


?>
  

Комментарии:

1. Почему вы используете процедурный mysqli, если вы изучаете синтаксис ООП?

2. вы должны передать свой объект подключения в качестве первого параметра здесь:- $result = mysqli_query($sql);

3. Спасибо за комментарии. Это то, что я пытаюсь сделать, чтобы передать соединение в качестве первого параметра mysqli_query(something, $sql), но не уверен, как добиться этого с помощью моей функции connect, которая возвращает true. изучу подробнее 🙂

Ответ №1:

Прежде чем пытаться изучать ООП-программирование, вы должны изучить базовый синтаксис ООП.

Для этого забудьте на некоторое время о создании собственных классов и научитесь использовать уже созданные. Итак, прежде всего, узнайте, как использовать mysqli. Который уже является классом.

А еще лучше, вместо этого изучите PDO, поскольку, в отличие от mysqli, это уже готовый к использованию класс доступа к базе данных, с ним вам не нужны такие функции, как processRowSet, например.