Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Classa błąd z połączeniem
Forum PHP.pl > Forum > Przedszkole
arzach
Witam mam taką classe i nie chce mi się połączyć z bazą danych. W pliku config.php podałem poprawne dane do bazy. Wie ktoś co może być nie tak ?

  1. <?php
  2. // uruchamia plik konfiguracyjny
  3. require_once('config.php');
  4. // uruchamia obsĹ_ugÄ_ bĹ_Ä_dĂłw
  5. require_once('error_handler.php');
  6. // klasa zawierajÄ_ca funkcjonalnoĹ_ci strony serwera
  7. class Chat
  8. {
  9.  // obsĹ_uguje bazÄ_ danych
  10.  private $mMysqli;  
  11.  // konstruktor otwiera poĹ_Ä_czenie z bazÄ_ danych
  12.  function __construct()
  13.  {  
  14.    // Ĺ_Ä_czy siÄ_ z bazÄ_
  15.    $this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
  16.  }
  17.  // destruktor zamyka poĹ_Ä_czenie z bazÄ_
  18.  public function __destruct()
  19.  {
  20.    $this->mMysqli->close();
  21.  }
  22.  // kasuje zawartoĹ_Ä_ tabeli zawierajÄ_cej wiadomoĹ_ci
  23.  public function deleteMessages()
  24.  {
  25.    // tworzy zapytanie SQL, ktĂłre dodaje nowÄ_ wiadomoĹ_Ä_ do serwera
  26.    $query = 'TRUNCATE TABLE chat';
  27.    // wykonuje zapytanie SQL
  28.    $result = $this->mMysqli->query($query);      
  29.  }
  30.  /*
  31.    Metoda postMessages dodaje nowÄ_ wiadomoĹ_Ä_ do bazy
  32.    - $name odpowiada nazwie uĹźytkownika wysĹ_anej wiadomoĹ_ci
  33.    - $messsage to wysĹ_ana wiadomoĹ_Ä_
  34.    - $color zawiera parametry koloru wybranego przez uĹźytkownika
  35.   */
  36.  public function postMessage($name, $message, $color)
  37.  {  
  38.    // usuwa znaki specjalne przez dodaniem wiadomoĹ_ci do bazy
  39.    $name = $this->mMysqli->real_escape_string($name);
  40.    $message = $this->mMysqli->real_escape_string($message);
  41.    $color = $this->mMysqli->real_escape_string($color);
  42.    // tworzy zapytanie SQL, ktĂłre dodaje nowÄ_ wiadomoĹ_Ä_ do serwera
  43.    $query = 'INSERT INTO chat(posted_on, user_name, message, color) ' .
  44.      'VALUES (NOW(), "' . $name . '" , "' . $message . '","' . $color . '")';
  45.    // wykonuje zapytanie SQL
  46.    $result = $this->mMysqli->query($query);      
  47.  }
  48.  /*
  49.    Metoda retrieveMessages pobiera wiadomoĹ_ci, ktĂłre zostaĹ_y wysĹ_ane na serwer
  50.    - parametr $id jest wysyĹ_any przez klienta i odpowiada identyfikatorowi ostatniej wiadomoĹ_ci pobranej przez niego.
  51.        WiadomoĹ_ci o późniejszych id bÄ_dÄ_ pobrane z serwera i wysĹ_ane klientowi w formacie XML
  52.   */
  53.  public function retrieveNewMessages($id=0)
  54.  {
  55.    // usuwa znaki specjalne przez dodaniem wiadomoĹ_ci do bazy
  56.    $id = $this->mMysqli->real_escape_string($id);
  57.    // tworzy zapytanie SQL, ktĂłre pobiera wiadomoĹ_Ä_ do serwera
  58.    if($id>0)
  59.    {
  60.      // pobiera wiadomoĹ_ci Ĺ_wieĹźsze niĹź te o danym $id
  61.      $query = 'SELECT chat_id, user_name, message, color, ' .
  62.        'DATE_FORMAT(posted_on, "%Y-%m-%d %H:%i:%s") ' . 'AS posted_on ' .
  63.          'FROM chat WHERE chat_id > ' . $id . ' ORDER BY chat_id ASC';
  64.    }
  65.    else
  66.    {
  67.      // przy pierwszym uruchomieniu wyĹ_wietla ostatnich 50 wiadomoĹ_ci z serwera
  68.      $query =
  69.      'SELECT chat_id, user_name, message, color, posted_on FROM ' .
  70.        '(SELECT chat_id, user_name, message, color, ' .
  71.        'DATE_FORMAT(posted_on, "%Y-%m-%d %H:%i:%s") AS posted_on ' . 'FROM chat ' .
  72.        'ORDER BY chat_id DESC ' . 'LIMIT 50) AS Last50 ' . 'ORDER BY chat_id ASC';
  73.    }
  74.    // wykonuje zapytanie
  75.    $result = $this->mMysqli->query($query);  
  76.    // tworzy odpowiedĹş XML
  77.    $response = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
  78.    $response .= '<response>';  
  79.    // wysyĹ_a czystÄ_ flagÄ_
  80.    $response .= $this->isDatabaseCleared($id);
  81.    // sprawdza czy jest odpowiedĹş
  82.    if($result->num_rows)
  83.    {      
  84.       // przeglÄ_da w pÄ_tli wszystkie przechwycone wiadomoĹ_ci, aby stworzyÄ_ wiadomoĹ_Ä_ wynikowÄ_
  85.        while ($row = $result->fetch_array(MYSQLI_ASSOC))
  86.        {
  87.              $id = $row['chat_id'];
  88.              $color = htmlspecialchars ($row['color']);
  89.              $userName = htmlspecialchars ($row['user_name']);
  90.              $time = htmlspecialchars ($row['posted_on']);
  91.              $message = htmlspecialchars ($row['message']);
  92.              $response .= '<id>' . $id . '</id>' .
  93.              '<color><![CDATA[' . $color . ']]></color>' .
  94.              '<time>' . $time . '</time>' .
  95.              '<name><![CDATA[' . $userName . ']]></name>' .
  96.              '<message><![CDATA[' . $message . ']]></message>';
  97.        }
  98.      // zamyka poĹ_Ä_czenie z bazÄ_, jak szybko jest to moĹźliwe
  99.      $result->close();
  100.    }
  101.    // koĹ_czy odpowiedĹş XML i wysyĹ_a jÄ_
  102.    $response = $response . '</response>';
  103.    return $response;    
  104.  }
  105.  /*
  106.    Metoda isDatabaseCleared sprawdza, czy baza zostaĹ_a wyczyszczona od ostatniego wywoĹ_ania serwera
  107.         -   parametr $id zawiera identyfikator ostatniej wiadomoĹ_ci pobranej rpzez klienta
  108.   */
  109.  private function isDatabaseCleared($id)
  110.  {
  111.    if($id>0)
  112.    {
  113.      //sprawdzenie liczby wierszy o id mniejszym niĹź uzyskany od klienta  mĂłwi nam, czy baza byĹ_a ostatnio czyszczona
  114.      $check_clear = 'SELECT count(*) old FROM chat where chat_id<=' . $id;
  115.      $result = $this->mMysqli->query($check_clear);
  116.      $row = $result->fetch_array(MYSQLI_ASSOC);      
  117.            
  118.      // jeĹ_li baza byĹ_a czyszczona, tablica musi byÄ_ przeĹ_adowana
  119.      if($row['old']==0)
  120.        return '<clear>true</clear>';    
  121.    }
  122.    return '<clear>false</clear>';
  123.  }
  124. }
  125. ?>
erix
Sprawdź sobie kod z mysqli_connect" title="Zobacz w manualu PHP" target="_manual dla połączenia. Masz tam przykładowe wyłapanie błędu.

Poza tym, rozłączanie bazy w destruktorze jest nie za dobrym pomysłem.
arzach
Robie tak i łączy się z bazą poprawnie. Więc co może być nie tak w tej Classie ?
  1. <?php
  2.  
  3. require_once('config.php');
  4.  
  5. $connection = @mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)
  6.  
  7. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  8.  
  9. echo "Udało się połączyć z serwerem!<br />";
  10.  
  11. $db = @mysql_select_db(DB_DATABASE, $connection)
  12.  
  13. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  14.  
  15. echo "Udało się połączyć z bazą dancych!";
  16.  
  17.  
  18. mysql_close($connection);
  19. ?>


A jak robie tak
  1. <?php
  2. require_once("chat.class.php");
  3. $chat = new Chat();
  4. $name = 'Kefir';
  5. $message = 'Test';
  6. $color = '#FF0000';
  7. $chat->postMessage($name, $message, $color);
  8. ?>


To wywala błąd
Kod
Fatal error: Class 'mysqli' not found in C:\Program Files\WebServ\httpd-users\test\chat.class.php on line 13


A w lini 13 mam
  1. <?php
  2. function __construct()
  3.  {  
  4.    // Ĺ_Ä_czy siÄ_ z bazÄ_
  5.    $this->mMysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
  6.  }
  7. ?>
erix
Kod
Fatal error: Class 'mysqli' not found in C:\Program Files\WebServ\httpd-users\test\chat.class.php on line 13

http://forum.php.pl/index.php?showtopic=45368
arzach
Zrobiłem tak jak tam pisze skopiowałem ten plik i dalej to samo. Ktoś ma jeszcze jakieś pomysły ?

Mam apache 2.2.6 oraz PHP 5.2.5 MYSQL 5.0.45
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.