Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [OOP] problema passaggio parametri a metodo

    richiamaPippo.php
    Codice PHP:
    <?php

    include_once("class/pippoClass.php");
    include_once(
    "class/pippoClass2.php");

    $classe1 = new Classe1();
    $classe2 = new Classe2();

    $sql "SELECT * FROM admin WHERE username='gatefn'";
    //$classe1->eseguiQuery($sql);

    echo "
    "
    ;

    $classe2->foo("SELECT * FROM admin WHERE username='gatefn'");

    ?>
    pippoClass.php
    Codice PHP:

    <?php

    class Classe1 {
        
        protected 
    $mysql;
        
        public function 
    __construct(){
            
    $this->mysql = new mysqli"localhost""root""""keybcorals" );
            
            if (
    $this->mysql->connect_errno) {
                echo 
    "Failed to connect to MySQL: (" $this->mysql->connect_errno ") " $this->mysql->connect_error;
        }
        }
        
        public function 
    eseguiQuery($sql){
       
            
            if (
    $result $this->mysql->query($sql))
                return 
    $result;
            else
                return 
    false;
        }
    }

    ?>

    pippoClass2.php
    Codice PHP:

    <?php

    class Classe2 extends Classe1 {

        public function 
    foo($sql){
            echo 
    $sql;
            
    $result $this->eseguiQuery($sql);
            
            if (
    $result)
                echo 
    "siii funziona anche nella classe 2";
            else
                echo 
    "non funziona";
        }
        
    }

    ?>
    Ragazzi la query che passo come parametro al metodo foo è errata però mi stampa a video "siii funziona anche nella classe 2"
    mentre se faccio una cosa del tipo:
    Codice PHP:
    $classe2->foo("queryscrittamale"); 
    mi stampa a video "non funziona".

    Come mai questo errore???

    Inoltre è corretto avere un attributo della classe e poi ne costruttore fare:
    codice:
    $this->mysqli = new mysqli.... oppure era meglio usare semplicemente
    
    $mysqli = new mysqli (...);
    Questo però mi porterebbe ad istanziare un nuovo oggetto di mysqli ogni volta che mi serve in un metodo.
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di ispuk
    Registrato dal
    Jan 2009
    Messaggi
    1,026
    ma se passi la query scritta male a quel metodo per forza ti stampa "non funziona" mi pare nella logica del metodo stesso.

    per il secondo dubbio io preferisco $this->mysqli credo sia piu un fatto di seguire uno standard, nel senso che se usi $this->pippo preferisci poi usare $this->pluto anche e viceversa $pippo-> e $pluto-> ...

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    No forse non è chiaro, se passo la query errata:

    codice:
    SELECT * FROM admin WHERE username='gatefn'
    al metodo foo, mi dice "sii funziona..." ma in realtà la query non è corretta.

    Inoltre mi spieghi meglio perchè utilizzare $this->mysqli anzichè $mysqli ?
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    C'è una differenza tra avere una query sbagliata e una che non da risultati. La prima fallisce ritornando false, la seconda non fallisce e ritorna un oggetto.

    Penso sia questo il tuo problema.


  5. #5
    Utente di HTML.it L'avatar di ispuk
    Registrato dal
    Jan 2009
    Messaggi
    1,026
    quello che ha scritto simo22 allora

  6. #6
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    il metodo mysqli->query, non dovrebbe restituire false in caso di query senza risultati?
    Con i sogni possiamo conoscere il futuro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Originariamente inviato da gaten
    il metodo mysqli->query, non dovrebbe restituire false in caso di query senza risultati?
    No, assolutamente.

    Ritorna sempre un oggetto mysqli_result. Devi contare il numero di righe per capire se è vuoto o meno.


  8. #8
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Comunque qui ci sono esempi ben chiari su mysqli->query. Restituisce true
    Con i sogni possiamo conoscere il futuro...

  9. #9
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Perfetto sono riuscito ad aggiustare il tutto in questo modo:

    Codice PHP:
    class Classe1 {
        
        protected 
    $mysqli;
        
        public function 
    __construct(){
            
    $this->mysqli = new mysqli"localhost""root""""keybcorals" );
            
            if (
    $this->mysqli->connect_errno) {
                echo 
    "Failed to connect to MySQL: (" $this->mysqli->connect_errno ") " $this->mysqli->connect_error;
        }
        }
        
        public function 
    eseguiQuery($sql){
       
            
    $result $this->mysqli->query($sql);
            
            if (
    $result->num_rows 0)
                return 
    $result;
            else
                return 
    false;
        }
        
        public function 
    contaRighe($sql){
            
            
    $result $this->mysqli->query($sql);
            
            return 
    $result->num_rows;
        }
    }

    class 
    Classe2 extends Classe1 {

        public function 
    foo($sql){
           
            if (
    $this->contaRighe($sql) == 1)
                echo 
    "siii funziona anche in classe 2";
            else
                echo 
    "non funziona";
        }
        

    Adesso funziona benissimo, fà proprio quello che mi serve.
    Una domanda:
    perchè negli esempi su php.net, per verificare se una query è stata eseguita con successo o meno fà direttamente:
    Codice PHP:
     if ($result
    e non fà il conteggio sulle righe come faccio io?
    Inoltre potete rispondere alla domanda dei post precedenti, perchè usare una variabile protected $mysqli, anzichè non fare direttamente $mysqli = new (... ).
    Ci tengo a saperlo poichè parlando con amici, mi hanno detto che non si è mai visto l'utilizzo del this in quel modo ???
    Con i sogni possiamo conoscere il futuro...

  10. #10
    Originariamente inviato da gaten
    Una domanda:
    perchè negli esempi su php.net, per verificare se una query è stata eseguita con successo o meno fà direttamente:
    Codice PHP:
     if ($result
    e non fà il conteggio sulle righe come faccio io?
    Perche' una query che non restituisce risultati e' comunque stata eseguita con successo. Quanti e quali risultati vengono restituiti e' una cosa che puoi valutare solo tu a seconda di quello che ti serve, mentre il fallimento di una query (ad esempio per un syntax error) e' una condizione oggettiva. Quindi prima verifichi che la query sia stata correttamente eseguita, poi analizzi cio' che ti e' stato restituito.

    Originariamente inviato da gaten
    Inoltre potete rispondere alla domanda dei post precedenti, perchè usare una variabile protected $mysqli, anzichè non fare direttamente $mysqli = new (... ).
    Ci tengo a saperlo poichè parlando con amici, mi hanno detto che non si è mai visto l'utilizzo del this in quel modo ???
    Non ho capito la domanda.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.