Visualizzazione risultati 1 fino 23 di 23

Discussione: [OOP] Classe Db

  1. #1
    Guest

    Predefinito [OOP] Classe Db

    Codice PHP:
    <?

    class dbClass
    {
    var
    $_connect;
    var
    $_result;

    function
    dbConnect($_host, $_user, $_pass)
    {
    $this->_connect = @mysql_connect($_host, $_user, $_pass) or die("Errore: Connessione non effettuata");
    }

    function
    dbSelect($_dbname)
    {
    @
    mysql_select_db($_dbname, $this->_connect) or die("Errore: Db non selezionato");
    }

    function
    dbDisconnect()
    {
    @
    mysql_close($this->_connect);
    $this->_connect = false;
    }

    function
    dbQuery($query)
    {
    return @
    mysql_db_query($this->_connect, $query) or die(mysql_errno());
    }

    function
    dbFetchArray($result)
    {
    return @
    mysql_fetch_array($result) or die(mysql_errno());
    }

    function
    dbFetchObject($result)
    {
    return @
    mysql_fetch_object($result) or die(mysql_errno());
    }

    function
    dbNumRows($result)
    {
    return @
    mysql_num_rows($result) or die(mysql_errno());
    }
    }
    ?>
    Questa è una classe Db che sto scrivendo a tempo perso per creare un CMS, unico problema è che non funziona

    Cioè non mi torna nessun errore ed è questo quello che mi fa incavolare... il codice che la usa è questo:

    Codice PHP:
    <?
    $db
    = new dbClass();
    $db->dbConnect("localhost","root","");
    $db->dbSelect("my_core_class");

    $result = $db->dbQuery("SELECT id,nome FROM test");
    $result = $db->dbFetchArray($result);
    print_r($result);

    $db->dbDisconnect();
    ?>
    La connessione e la selezione del db viene effettuata con successo. La tabella di prova che utilizzo esiste e ha 2 record.

    Se la provate vedrete che il print_r non stampa nulla. In un primo momento ho pensato che print_r non facesse quello che serviva a me (cioè stampare l'array che ristituisce la funzione) e ho provato ad usare print $result['id'], ma anche così nada... Non trovo dove sia il problema

  2. #2
    Guest

    Predefinito

    l'unico problema ke ho trovato è ke se selezioni il db nn serve ke usi mysql_db_query e poi i parametri di questa funzione sono: (DB_NAME, QUERY, CONNECTION)

    ciao ^__^

  3. #3
    Guest

    Predefinito

    Umm, non ci avevo pensato. Ho modificato la classe così:

    Codice PHP:
    <?
    class dbClass
    {
    function
    dbConnect($_host, $_user, $_pass)
    {
    @
    mysql_connect($_host, $_user, $_pass) or die("Errore: Connessione non effettuata");
    }

    function
    dbSelect($_dbname)
    {
    @
    mysql_select_db($_dbname) or die("Errore: Db non selezionato");
    }

    function
    dbDisconnect()
    {
    @
    mysql_close();
    }

    function
    dbQuery($query)
    {
    return @
    mysql_query($query) or die(mysql_errno());
    }

    function
    dbFetchArray($result)
    {
    return @
    mysql_fetch_array($result) or die(mysql_errno());
    }

    function
    dbFetchObject($result)
    {
    return @
    mysql_fetch_object($result) or die(mysql_errno());
    }

    function
    dbNumRows($result)
    {
    return @
    mysql_num_rows($result) or die(mysql_errno());
    }
    }
    ?>
    ma comunque non stampa nulla a video

  4. #4
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Uhm, dunque,
    il problema principale sta nel fatto che non ti stampa l'errore giusto?
    E' quello che ti stupisce.

    Se non erro, pur essendo php molto versatile con i tipi di dati, stranamente proprio in questo caso il problema sta nel fatto che la funzione die() vuole una stringa come parametro per il messaggio, mentre tu usi un int mysql_errno().
    Quindi prova a sostituire in tutte le occorrenze di questo tipo con:
    ... or die("Errore n. ".mysql_errno());

    Cioè basta che concateni l'int ad una stringa.
    Dovrebbe funzionare, fammi sapere.
    ciao
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  5. #5
    Guest

    Predefinito

    ora è così

    Codice PHP:
    <?
    class dbClass
    {
    function
    dbConnect($_host, $_user, $_pass)
    {
    @
    mysql_connect($_host, $_user, $_pass) or die("Errore: Connessione non effettuata");
    }

    function
    dbSelect($_dbname)
    {
    @
    mysql_select_db($_dbname) or die("Errore: Db non selezionato");
    }

    function
    dbDisconnect()
    {
    @
    mysql_close();
    }

    function
    dbQuery($query)
    {
    return @
    mysql_query($query) or die("Errore Mysql: ".mysql_errno());
    }

    function
    dbFetchArray($result)
    {
    return
    mysql_fetch_array($result) or die("Errore Mysql: ".mysql_errno());
    }

    function
    dbFetchObject($result)
    {
    return @
    mysql_fetch_object($result) or die("Errore Mysql: ".mysql_errno());
    }

    function
    dbNumRows($result)
    {
    return @
    mysql_num_rows($result) or die("Errore Mysql: ".mysql_errno());
    }
    }
    ?>
    ho fatto come hai detto heracleum, ma comunque non mi stampa nulla. Ho provato togliendo il silence e mi stampa l'errore ma quello canonico di mysql

    Codice:
    mysql_fetch_array(): supplied argument is not a valid MySQL result resource in d:\www\core_class\classDb.php on line 34
    ora mettendo da parte il problema mysql, come mai non mi stampa l'errore con il die?

    Grazie per l'aiuto

  6. #6
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Forse perché non è un errore ma un Warning.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  7. #7
    Guest

    Predefinito

    per stampare l'errore presumo tu debba usare una cosa del tipo
    Codice PHP:
    echo "mysql_errno()";

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da JoErNanO
    per stampare l'errore presumo tu debba usare una cosa del tipo
    Codice PHP:
    echo "mysql_errno()";
    potrebbe andare ma a me non serve quello, a me serve che se c'è un errore, blocchi lo script e mi dica dove sta

  9. #9
    Guest

    Predefinito

    Giusto come tentativo, prova a non utilizzare la sintassi "return + or"; il problema potrebbe derivare da un interpretazione sbagliata di tale costrutto. ad es.
    Codice PHP:
    function dbQuery($query)
    {
    $result = @mysql_query($query);
    if (
    $result == false)
    {
    die(
    "Errore Mysql: ".mysql_errno());
    }
    return
    $result;
    }
    fai questa prova per tutte le funzioni che ritornano qualcosa, riscontri gli stessi problemi?

    mavericck

  10. #10
    Guest

    Predefinito

    Codice PHP:
    <?
    class dbClass
    {
    function
    dbConnect($_host, $_user, $_pass)
    {
    @
    mysql_connect($_host, $_user, $_pass) or die("Errore: Connessione non effettuata");
    }

    function
    dbSelect($_dbname)
    {
    @
    mysql_select_db($_dbname) or die("Errore: Db non selezionato");
    }

    function
    dbDisconnect()
    {
    @
    mysql_close();
    }

    function
    dbQuery($query)
    {
    $this->_result = @mysql_query($query) or die("Errore Mysql: ".mysql_error());
    return
    $this->_result;
    }

    function
    dbFetchArray($result)
    {
    return @
    mysql_fetch_array($result) or die("Errore Mysql: ".mysql_error());
    }

    function
    dbFetchObject($result)
    {
    return @
    mysql_fetch_object($result) or die("Errore Mysql: ".mysql_error());
    }

    function
    dbNumRows($result)
    {
    return @
    mysql_num_rows($result) or die("Errore Mysql: ".mysql_error());
    }
    }
    ?>
    Ora mi torna questo

    Codice:
    1
    Ora non mi da più errore, ma comunque non mi stampa l'array del risultato.

    Come mai?
    Ultima modifica di neoscript : 15-02-2006 alle ore 15.06.43

  11. #11
    Guest

    Predefinito

    Ma perchè usi mysql_errno?? Molto meglio mysq_error
    Cmq dovresti cercare di determinare quale funzione ti restituisce quel supposto errore.


    Ciaoooo!!!

  12. #12
    Guest

    Predefinito

    nada?

  13. #13
    Guest

    Predefinito

    Nada??? Nada che???
    Che risposta è?? Non funziona? Cosa hai provato a fare? Hai letto i suggerimenti??
    Stiamo parlando di una cosa tua, ma non sembra che ti interessi molto....


    Ciao!

  14. #14
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    Nada??? Nada che???
    Che risposta è?? Non funziona? Cosa hai provato a fare? Hai letto i suggerimenti??
    Stiamo parlando di una cosa tua, ma non sembra che ti interessi molto....


    Ciao!
    Ho appena risolto, il problema stava nel return. Per qualche strano motivo il return non inviava i dati se era usato così:

    Codice PHP:
    return @mysql_fetch_array($result) or die("Errore Mysql: ".mysql_error());
    Ho risolto modificandolo così:

    Codice PHP:
    $this->_result = @mysql_fetch_array($result) or die("Errore Mysql: ".mysql_error());
    return
    $this->_result;
    Debug, non ho postato altro semplicemente perchè non c'era nulla di nuovo ed ero fermo anche io con il test in quel punto.
    Ultima modifica di neoscript : 16-02-2006 alle ore 21.40.16

  15. #15
    Guest

    Predefinito

    Ora funziona, recupera tutti i record e li stampa correttamente. Non ci sono errori (sicuro di questo perchè ho tolto i silence per controllare) ma comunque mi stampa la stringa

    Codice:
    Errore Mysql:
    ma senza inserire l'errore, che quindi non sussiste. Non capisco perchè lancia la parte or die(..); della funzione.

    La classe è questa

    Codice PHP:
    <?
    class dbClass
    {
    function
    dbConnect($_host, $_user, $_pass)
    {
    @
    mysql_connect($_host, $_user, $_pass) or die("Errore: Connessione non effettuata");
    }

    function
    dbSelect($_dbname)
    {
    @
    mysql_select_db($_dbname) or die("Errore: Db non selezionato");
    }

    function
    dbDisconnect()
    {
    @
    mysql_close();
    }

    function
    dbQuery($query)
    {
    $this->_result = mysql_query($query) or die("Errore Mysql: ".mysql_error());
    return
    $this->_result;
    }

    function
    dbFetchArray($result)
    {
    $this->_result = mysql_fetch_array($result) or die("Errore Mysql: ".mysql_error());
    return
    $this->_result;
    }

    function
    dbFetchObject($result)
    {
    return @
    mysql_fetch_object($result) or die("Errore Mysql: ".mysql_error());
    }

    function
    dbNumRows($result)
    {
    return @
    mysql_num_rows($result) or die("Errore Mysql: ".mysql_error());
    }
    }
    ?>
    e il codice che la utilizza è questo

    Codice PHP:
    <?
    $db
    = new dbClass();
    $db->dbConnect("localhost","root","");
    $db->dbSelect("my_core_class");

    $aa = $db->dbQuery("SELECT id,nome FROM test");
    while (
    $result = $db->dbFetchArray($aa))
    {
    print
    $result['id']."-".$result['nome'];
    }

    $db->dbDisconnect();
    ?>
    Tutte a me ogni volta devono succedere!

  16. #16
    Guest

    Predefinito

    mavericck insegna

  17. #17
    Guest

    Predefinito

    Citazione Originalmente inviato da Inverno
    mavericck insegna


  18. #18
    Guest

    Predefinito

    prova così:
    Codice PHP:
    function dbQuery($query)
    {
    if (
    $result = mysql_query($query)) {
    return
    $result;
    } else {
    die(
    'Errore Mysql: '.mysql_error());
    }
    }
    cmq è sempre bene implementare un debugger mysql usando la sintassi EXPLAIN di mysql
    Ultima modifica di Inverno : 16-02-2006 alle ore 22.32.06

  19. #19
    Guest

    Predefinito

    Codice PHP:
    <?
    class dbClass
    {
    function
    dbConnect($_host, $_user, $_pass)
    {
    @
    mysql_connect($_host, $_user, $_pass) or die("Errore: Connessione non effettuata");
    }

    function
    dbSelect($_dbname)
    {
    @
    mysql_select_db($_dbname) or die("Errore: Db non selezionato");
    }

    function
    dbDisconnect()
    {
    @
    mysql_close();
    }

    function
    dbQuery($query)
    {
    $this->_result = @mysql_query($query) or die ("Errore Mysql: ".mysql_error());
    if (
    $this->_result)
    {
    return
    $this->_result;
    }
    else
    {
    die(
    "Errore Mysql: ".mysql_error());
    }
    }

    function
    dbFetchArray($result)
    {
    $this->_result = @mysql_fetch_array($result);
    if (
    $this->_result)
    {
    return
    $this->_result;
    }
    else
    {
    die(
    "Errore Mysql: ".mysql_error());
    }
    }

    function
    dbFetchObject($result)
    {
    $this->_result = @mysql_fetch_object($result);
    if (
    $this->_result)
    {
    return
    $this->_result;
    }
    else
    {
    die(
    "Errore Mysql: ".mysql_error());
    }
    }

    function
    dbNumRows($result)
    {
    $this->_result = @mysql_num_rows($result);
    if (
    $this->_result)
    {
    return
    $this->_result;
    }
    else
    {
    die(
    "Errore Mysql: ".mysql_error());
    }
    }
    }
    ?>
    E la uso così

    Codice PHP:
    <?
    $db
    = new dbClass();
    $db->dbConnect("localhost","root","");
    $db->dbSelect("my_core_class");

    $aa = $db->dbQuery("SELECT id,nome FROM test");
    while (
    $result = $db->dbFetchArray($aa))
    {
    print
    $result['id']."-".$result['nome']."<br />";
    }

    $db->dbDisconnect();
    ?>
    Comunque mi dice:

    Codice:
    Errore Mysql:
    Ho pensato che mi tornava errore, perchè il risultato di mysql_fetch_array è appunto una array e quindi non tornava true o false. Ho provato con un controllo is_array, ma anche così mi torna errore. La cosa che mi fa imbestialire, e che se tolgo il silence NON mi da errore.

  20. #20
    Guest

    Predefinito

    La riscrivo io che facciamo prima
    Codice PHP:
    <?php
    class dbClass
    {
    function
    dbConnect($_host, $_user, $_pass)
    {
    mysql_connect($_host, $_user, $_pass) or die("Errore: Connessione non effettuata");
    }

    function
    dbSelect($_dbname)
    {
    mysql_select_db($_dbname) or die("Errore: Db non selezionato");
    }

    function
    dbDisconnect()
    {
    mysql_close();
    }

    function
    dbQuery($query)
    {

    if (
    $result = mysql_query($query))
    {
    return
    $result;
    }
    else
    {
    die(
    "Errore Mysql: ".mysql_error());
    }
    }

    function
    dbFetchArray($result)
    {
    return
    mysql_fetch_array($result, MYSQL_ASSOC);
    }
    }
    ?>
    errori :
    1) $this->_result è prima una risorsa mysql e poi (dopo il primo fetch_array) un array ....
    2) mysql_fatch_array() ritorna false sia in caso di errore sia in caso non ci siano più righe, quindi togli pure il die()
    3) manca la costante MYSQL_ASSOC
    Ultima modifica di Inverno : 17-02-2006 alle ore 00.17.00

  21. #21
    Guest

    Predefinito

    Grazie, ora funziona.
    Comunque la costante MYSQL_ASSOC è impostata di default, quindi non è obbligatoria.

  22. #22
    Guest

    Predefinito

    il default è MYSQL_BOTH, se usi gli associativi sprechi solo memoria assegnandoli entrambi
    perchè non impariamo ad ottimizzare il codice da subito?

    cmq non è un errore

  23. #23
    Guest

    Predefinito

    Citazione Originalmente inviato da Inverno
    il default è MYSQL_BOTH, se usi gli associativi sprechi solo memoria assegnandoli entrambi
    perchè non impariamo ad ottimizzare il codice da subito?

    cmq non è un errore
    Sospettavo sprecasse più risorse, ma sinceramente non ho mai controllato quanto

    Comunque grazie per l'aiuto

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •