Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: obiektowe rozwiazanie polaczenia z baza
Forum PHP.pl > Forum > PHP
donmateo
witam
mam kilka pytan do nastepujacego kodu:
Kod
class SQLi
  {
      public $polaczenie;
      public function __construct($host,$user, $passwd, $base)
      {
          if (!$this->polaczenie=new mysqli($host,$user, $passwd))
              echo "error: ".$this->polaczenie->connect_errno;
      }
  }

teraz dziwi mnie to ze wykrzyknik "!" przed $this->polaczenie nie dziala jak zaprzeczenie. Kod w klamrach if'u wykonuje sie dopiero po usunięciu wykrzyknika. Drugie pytanie: Testujac tą klasy specjalnie podawalem bledne hasla i wtedy argument $polaczenie nie przyjmowal wartosci klasy mysqli, co prowadzilo do tego ze $this->polaczenie->connect_errno dawalo blad. Czy jesli przekazemy klasie mysqli bledne dane to nie zostanie utworzony jej obiekt z numerem bledu i jego trescia?

ok znalazlem takie rozwiazanie, ze trzeba uzyc mysql_connect_errno. Ale skoro mysqli zawsze tworzy obiekt, bez wzgledu na bledy, to dlaczego polecenie $this->polaczenie->connect_errno wywala bledy?
dr_bonzo
$this->polaczenie=new mysqli($host,$user, $passwd)
if ( ! $this->polaczenie ) ....
donmateo
dalej nie wchodzi w petle
zrobilem tak:
if(mysql_connect_errno)
i teraz: $polaczenie->connect_errno lub $polaczenie->errno i nic.
Mysle ze nie ma to znaczenie ze ten kod mam w konstruktorze.
Crozin
W $this->polaczenie będziesz mieć instancję klasy MySQLi niezależnie od tego czy połączenie się powiodło czy nie.
Nie znam MySQLi, ale to chyba powinno wyglądać tak:
  1. <?php
  2. $this->polaczenie = new mysqli(...);
  3. if($this->polaczenie->connect_errno()){
  4. throw new Exception('polaczenie nieudane');
  5. }
  6.  
  7. //polaczenie powiodlo sie
  8. ?>
Cysiaczek
Przenoszę na PHP, bo żadne problemy obiektowe nie są poruszane
dr_bonzo
PHP sux,

ja:
Cytat
$this->polaczenie=new mysqli($host,$user, $passwd)
if ( ! $this->polaczenie ) ....


manual:
Cytat
Returns a object which represents the connection to a MySQL Server or FALSE if the connection failed.


zapomnialem ze mysqli_ jest dostepne jako zestaw funckcji, i nie pomyslalem ze operator new nie moze zwrocic false :/
donmateo
to tak dla potomności:
rozwiązanie jest podobne do tego które przedstawił Crozin:

CODE

<?php
$this->polaczenie=new mysqli(...);
if($this->polaczenie->connect_errno)
{
throw new Exception('Błąd: ....');
}
?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.