Ketch
@Ketch
Все гениальное просто!

Почему не работает мой класс для подключения к MySql?

Пишу свой первый класс на php, выдает ошибку подключения к БД: Access denied for user ''@'localhost' (using password: NO) Из сие ошибки можно увидеть, что переменная с именем пользователя root не прочиталась при подключении (в ошибки её просто нет).

Вот класс:

<?php
   class Database {
	   private $host = "localhost";
	   private $basename = "base100500";
	   private $bd_user = "root";
	   private $pass = "";
	   
	   function sender($ip, $client, $ref, $time) {
		   $mysqli = new mysqli($host, $bd_user, $pass, $basename);
	       if(mysqli_connect_errno()) {
              echo "Подключение невозможно: ".mysqli_connect_error();
           }
		   $mysqli->query("INSERT INTO visits(ip, client, ref, time) VALUES('$ip', '$client', '$ref', '$time')");
		   $mysqli->close();
	   }
	   
	   function receiver() {
		   $mysqli = new mysqli($host, $bd_user, $pass, $basename);
		   if(mysqli_connect_errno()) {
              echo "Подключение невозможно: ".mysqli_connect_error();
           }
		   $result = $mysqli->query("SELECT * FROM visits ORDER BY id DESC LIMIT 1000");
		   
		   //Вывод записей
		   while($row = $result->fetch_assoc()) {
			   echo "<tr>";
			   echo "<td>".$row['id']."</td> <td>".$row['ip']."</td> <td>".$row['client']."</td> <td>".$row['ref']."</td> <td>".$row['time']."</td>";
			   echo "</tr>";
		   }
		   $mysqli->close();
	   }
   }




?>


Если подставить значение переменных напрямую в конструктор - то все работает, а вот так вот не работает. Почему?
  • Вопрос задан
  • 264 просмотра
Пригласить эксперта
Ответы на вопрос 2
Denormalization
@Denormalization
Это основы. Открываем php.net/manual/ru/language.oop5.basic.php и играем в игру "Найди 10 отличий".

PS
Подсказка:
Читаем про доступ к методам и свойствам классов в PHP.
Ответ написан
@zhainar
Гуглю за вас
разделите методы на более простые получение данных, вставка данных, вывод данных, избавтесь от повторения, осмысленные названия функций, класс больше подходит под модель для работы с одной таблицей visits.

<?php
   class Database {
     private $host = "localhost";
     private $basename = "base100500";
     private $bd_user = "root";
     private $pass = "";
     private $mysqli;

    public function connection() 
{
    if(!$this->mysqli) { $this->mysqli= new mysqli($this->host, $this->bd_user, $this->pass, $this->basename); }
    if ($this->mysqli->connect_errno) { throw new Exception('Ошибка соединения: ' . $this->mysqli->connect_errno); }
    return $this->mysqli;
}

public function closeConnection()
{
    return $this->connection()->close();
}
     
     public function setSender($ip, $client, $ref, $time) {
       return $this->connection()->query("INSERT INTO visits(ip, client, ref, time) VALUES('$ip', '$client', '$ref', '$time')");
     }
     
     public function getReceiver() {
      return $this->connection()->query("SELECT * FROM visits ORDER BY id DESC LIMIT 1000");
    }
    
    public function showReceiver($receiver) {
       while($row = $receiver->fetch_assoc()) {
         echo "<tr>";
         echo "<td>".$row['id']."</td> <td>".$row['ip']."</td> <td>".$row['client']."</td> <td>".$row['ref']."</td> <td>".$row['time']."</td>";
         echo "</tr>";
       }
    }

   }




?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы