Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: session w bazie + połączenie adodb
Forum PHP.pl > Forum > PHP > Object-oriented programming
krzysiekX
Witam
Mam stworzone połączenie z mysql z użyciem adodb

$db = NewADOConnection('mysql');
$db->Connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);

Wszystko działa pięknie.
I teraz chciałem użyć tego połącznia w klasie ( do obsługi sesji)
I niemogę sobie poradzić z przekazaniem go.
Wiem że penie było już, ale nie mogę nigdzie znaleść

Pozdrawiam.
mike
  1. <?php
  2.  
  3. $db = &NewADOConnection('mysql');
  4. $db->Connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
  5.  
  6. $objMySessionHandler = new MySessionHandler( $db );
  7.  
  8. //...
  9.  
  10. ?>

O to chodzi questionmark.gif
krzysiekX
hmm no nie, gdyby to było takie proste to nie zaśmiecałbym forum winksmiley.jpg
Chyba że w tej klasie session jakoś się trzeba jeszcze odwołać
Bo jak daje
$db->Execute nie znajduje takiej metody.
Fatal error: Call to a member function Execute()

Może musze w tej klasie jeszcze raz nawiązać połączenie z bazą questionmark.gif?
markac
  1. <?php
  2. $db = NewADOConnection( 'mysql' );
  3. $db->Connect( DB_HOST, DB_USER, DB_PASS, DB_NAME );
  4. echo 'Resource: ' . $db->_connectionID;
  5. ?>


W zmiennej _connectionID przechowywany jest identyfikator połączenia.
mike
Niemożliwe.
Sam kożystałem z dokladnie takiego rozwiązania i wszystko zawsze działało :
  1. <?php
  2.  
  3. $db = &NewADOConnection('mysql');
  4. $db->Connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
  5.  
  6. $objMySessionHandler = new MySessionHandler( &$db );
  7.  
  8.  
  9. class MySessionHandler
  10. {
  11.     function MySessionHandler( $objDB )
  12.     {
  13.         $objDB->Execute( &#092;"ZAPYTANIE\" );
  14.  
  15.         // ...
  16.     }
  17.  
  18.     // ...
  19. }
  20.  
  21. //...
  22.  
  23. ?>

A może to przez to że zapomniałeś o & :
  1. <?php
  2. //    |
  3. //    V
  4. $db = &NewADOConnection('mysql');
  5.  
  6. //...
  7.  
  8. ?>
krzysiekX
Mam tak:

  1. <?php
  2.  $db = &NewADOConnection('mysql');
  3. $db->Connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
  4. $db->debug=1;
  5.  
  6. $session = new Session($db,'sessions', '500');
  7.   session_set_save_handler(array(&$session, '_open',),
  8.  array(&$session, '_close'),
  9. array(&$session, '_read'),
  10. array(&$session, '_write'),
  11. array(&$session, '_destroy'),
  12. array(&$session, '_gc'));
  13.  
  14.  class Session
  15.  {
  16.  var $db;
  17.  var $session_table;
  18.  var $session_lifetime;
  19.  
  20. function session($db, $session_table, $session_lifetime = '0' )
  21. {
  22. $this->db = $db;
  23. $this->session_table = $session_table;
  24. $this->session_lifetime = $session_lifetime; 
  25.  }
  26.  
  27. // i np read 
  28.  
  29.  function _read($session_id)
  30.  {
  31.   $result = $this->db->Execute(&#092;"SELECT session_value FROM \".$this->session_table.\" 
  32.  WHERE session_id = '\".$session_id.\"'&#092;");
  33.  
  34. if ($result && @$result->RecordCount() > 0) {
  35.  
  36.  $row = $result->FetchRow();
  37. $session_value = $row['session_value'];
  38.  
  39. return $session_value;
  40.  }
  41. else {
  42.  return false;
  43. }
  44.  } 
  45. ?>

I teraz tak w każdej z metod wywołanie echo 'Resource: ' . $db->_connectionID;
zwraca poprawny identyfikator.
Gdy włącze debug to wypisuje:

  1. <?php
  2. (mysql): INSERT INTO sessions (session_id, session_start, session_time, session_value) VALUES ('59e8fc3d6e6145e9c684f2fdcfad6754', '1109506393', '1109506393', 'cat_id|s:2:\"91\";SES_PRICE_koszyk|a:1:{i:2765;s:2:\"52\";}SES_WEIGHT_koszyk|a:1:{i:2765;s:1:\"1\";}SES_QTY_koszyk|a:1:{i:2765;i:2;}weight|i:2;suma_zakupow|i:104;')  
  3. --------------------------------------------------------------------------------
  4.  
  5. Warning: mysql_query(): 14 is not a valid MySQL-Link resource in d:&#092;serverwwwsklep_toolsadodbdriversadodb-mysql.inc.php on line 461
  6.  
  7. ?>


Samo zapytanie jest ok
Co może być problemem?
Mógłbyś podać mi jak dokładnie to u Ciebie wygląda
Pozdrawiam
mike
Cytat(krzysiekX @ 2005-02-27 13:25:43)
(...)
I teraz tak w każdej z metod wywołanie echo 'Resource: ' . $db->_connectionID;
(...)

Wewnątrz metod to powinno być :
  1. <?php
  2. //...
  3. $this->db->_connectionID;
  4. //...
  5. ?>

Cytat(krzysiekX @ 2005-02-27 13:25:43)
Mógłbyś podać mi jak dokładnie to u Ciebie wygląda

Nie mam takiego przykładu. Chodziło mi o to że często kożystam z takiego przekazywania obiektów. Nie koniecznie w takim przykładzie jak Ty masz.
A wygląda to na przykład tak :
  1. <?php
  2.  
  3. $db = &NewADOConnection('mysql');
  4. $db->Connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
  5.  
  6. $objMySessionHandler = new MySessionHandler( &$db );
  7.  
  8.  
  9. class MySessionHandler
  10. {
  11. var $objDB = null;
  12.  
  13. function MySessionHandler( $objDB )
  14. {
  15. $this->objDB = $objDB;
  16.  
  17. // ...
  18. }
  19.  
  20. function MakeQuery()
  21. {
  22. $this->objDB->Execute( &#092;"ZAPYTANIE\" );
  23.  
  24. //...
  25. }
  26.  
  27. // ...
  28. }
  29.  
  30. $objMySessionHandler->MakeQuery();
  31.  
  32. ?>

I zawsze działa.
krzysiekX
Wielkie dzięki za wszelkie rady.
Poszło wkońcu po nawiązaniu połączenia w clasie

  1. <?php
  2.  $this->objDB = &NewADOConnection('mysql');
  3. $connect = $this->objDB->Connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
  4. ?>


Pozdrawiam
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.