Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysqli] Przekazanie wskaźnika wyniku.
Forum PHP.pl > Forum > PHP
starach
Zdziwiłem się ale nie mogę przekazać identyfikatora wyniku,
zwracanego przez mysqli_query do następnej klasy.
Pomyślałem że w takim razie skoro nie mogę przekazać,
to wyślę treść zapytania do następnej klasy i tam je wykonam.
Ten pomysł też padł bo muszę przecież wykorzystać jakoś identyfikator połączenia który jest definiowany w klasie nadrzędnej. Pytanie jak przekazać resource id do klasy operującej na wyniku zapytania.

Co ciekawsze problem pojawił się kiedy chciałem skorzystać z mysqli_affected_rows() natomiast w pozostałych przypadkach jak pobieranie kolejnych wierszy z wyniku wszystko jest ok.
dr_bonzo
A wlasnie ze sie da. Pokaz kod po pewnie gdzies sie pomyliles.

  1. <?php
  2. $drugiObiekt->zrobCos( $identyfikatorPolaczenie, $query );
  3. ?>
starach
Hmm identyfikator połączenia możliwe że się da,
ja nie mogę przekazać identyfikatora wyniku zwróconego przez zapytanie.
Kod zaraz pokarze tylko się obudzę. tongue.gif
  1. <?php
  2. public function query($query) 
  3. {
  4. if(false == ($this->sql_result = @mysqli_query($this->db_link,$query)))
  5. {
  6.  throw new Error($query, E_ERROR, mysqli_errno($this->db_link));
  7. } else {
  8.  return new MySQLResult($this->sql_result);
  9. }
  10. }
  11. ?>
Fragment klasy MySQLResult
  1. <?php
  2. public function __construct($sql_result)
  3. {
  4. $this->sql_result = $sql_result;
  5. }
  6. public function columnCount()
  7. {
  8. return mysqli_num_rows($this->sql_result);
  9. }
  10. public function affectedRows()
  11. {
  12. return mysqli_affected_rows($this->sql_result);
  13. }
  14. ?>

Exception 2: E_WARNING
File: D:\WWW\bp\includes\class\class_mysql_result.php Line: 23
Error: mysqli_affected_rows() expects parameter 1 to be mysqli, boolean given
Ludvik
Zobacz co się kryje pod zmienną sql_result... Skoro zwraca boola to z manuala można wywnioskować, że:

1. Jeżeli fałsz, to zapytanie niepoprawne.
2. Jeżeli prawda, to zapytanie wykonało się. Uchwyt do wyniku jest zwracany przy zapytaniach SELECT, SHOW, DESCRIBE i EXPLAIN.
starach
Tak znam manual ( trochę tongue.gif )
Zapytanie:
UPDATE session SET sess_last_update=CURRENT_TIMESTAMP(), sess_value='' WHERE sess_id='2191cce17c1148485c3b1aeee690cb9a'boolean
Dobrze się wykonuje przez klienta baz danych a przez mysqli_query() zwraca true i nie mogę pobrać ilości rekordów na których ono zadziałało,
bo dostaje komunikat taki jak powyżej.
mysqli_affected_rows() expects parameter 1 to be mysqli, boolean given
Wywołuję tą metodę w klasie Session.
  1. <?php
  2. public function _write($session_id, $session_data)
  3. {
  4. $result = $this->db->query('SELECT COUNT(*) as count FROM '.DB_PREFIX.'session WHERE sess_id=''.$session_id.''');
  5. $row = $result->fetch();
  6. if($row['count'] > 0)
  7. {
  8. $result = $this->db->query('UPDATE '.DB_PREFIX.'session SET sess_last_update=CURRENT_TIMESTAMP(),
  9. sess_value=''.$session_data.'' WHERE sess_id=''.$session_id.''');
  10. if($result->affectedRows() > 0)
  11. {
  12. return true;
  13. } else {
  14. return false;
  15. }
  16. } else {
  17. $result = $this->db->query('INSERT INTO '.DB_PREFIX.'session 
  18. (sess_id, sess_start, sess_last_update, sess_value, user_id, user_ip) 
  19. VALUES(''.$session_id.'', CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), ''.$session_data.'', 1, '127.0.0.1')');
  20. if($result->affectedRows() > 0)
  21. {
  22. return true;
  23. } else {
  24. return false;
  25. }
  26. }
  27. }
  28. ?>
  1. <?php
  2. public function _gc($maxlifetime)
  3. {
  4. $sess_live_time = strftime('%Y-%m-%d %H:%M', strtotime("-$maxlifetime seconds"));
  5. $result = $this->db->query('DELETE FROM '.DB_PREFIX.'session WHERE sess_last_update < ''.$sess_live_time.''');
  6. return $result->affectedRows();
  7. }
  8. ?>
Ludvik
Do mysqli_affected_rows" title="Zobacz w manualu PHP" target="_manual podajesz jako argument uchwyt do połączenia, który zwraca funkcja mysqli_connect" title="Zobacz w manualu PHP" target="_manual().
starach
O rany ale ze mnie oferma tongue.gif
Dzięki i przepraszam za zaśmiecanie forum kretyńskimi tematami.
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.