Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysqli] Przekazanie wskaźnika wyniku.
starach
post
Post #1





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A wlasnie ze sie da. Pokaz kod po pewnie gdzies sie pomyliles.

  1. <?php
  2. $drugiObiekt->zrobCos( $identyfikatorPolaczenie, $query );
  3. ?>
Go to the top of the page
+Quote Post
starach
post
Post #3





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


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ę. (IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował orglee 2.06.2007, 11:11:27
Go to the top of the page
+Quote Post
Ludvik
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
starach
post
Post #5





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Tak znam manual ( trochę (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował orglee 2.06.2007, 14:31:05
Go to the top of the page
+Quote Post
Ludvik
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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().
Go to the top of the page
+Quote Post
starach
post
Post #7





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


O rany ale ze mnie oferma (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Dzięki i przepraszam za zaśmiecanie forum kretyńskimi tematami.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 10:51