Visualizzazione risultati 1 fino 5 di 5

Discussione: [ MySqli ] mysqli_stmt!

  1. #1
    Guest

    Predefinito [ MySqli ] mysqli_stmt!

    Ciao ragazzi, nuovo topic... stessi problemi.
    Allora, ho un metodo che dovrebbe inserire nel database MySql un dato... un semplice dato. ( insert_log )

    Codice PHP:
    class User {

    /* Proprietą della classe */

    // Proprietą che contiene la connessione al database
    protected $db;

    /* Metodi della classe */

    // Metodo costruttore che richiama la variabile globale della connessione
    public function __construct() {
    $this->db = $GLOBALS["db"];
    }


    /* Metodo per effettuare il Login */
    public function login($email, $password) {
    if (empty(
    $email) or empty($password)){
    die(
    "Errore");
    return
    $msg;
    }

    $found = FALSE;

    // Inizializzo la query
    $stmt = $this->db->stmt_init();
    // Preparo la query
    $stmt->prepare("SELECT email, password FROM table_users WHERE email = ? AND password = ?");
    // Inserisco i parametri da inviare al database
    $stmt->bind_param("ss", $email, $password);
    // Eseguo la query
    $stmt->execute();
    // Conservo i risultati
    $stmt->store_result();
    // Controllo quante righe mi ha restituito la query
    if($stmt->num_rows) {
    $found = TRUE;
    }
    // Chiudo la query
    $stmt->close();
    $this->insert_log($email);
    return
    $found;
    }

    /* Metodo per la registrazione dell'accesso */
    public function insert_log($email) {
    // Inizializzo la query
    $stmt = $this->db->stmt_init();
    // Preparo la query
    $stmt->prepare("INSERT INTO table_login (email_login) VALUES (".$email.")");
    // Inserisco i parametri da inviare al database
    $stmt->bind_param("s", $email);
    // Eseguo la query
    $stmt->execute();
    }

    }
    Semplicemente... non vą. Come potete vedere il metodo viene richiamato a sua volta nel metodo del login. Questo č il codice di richiamo:

    Codice PHP:
    include_once("config.inc.php");
    $db = new Database; // Avvio la connessione al Database
    $user = new User;


    $email = $_POST["username"];
    $password = $_POST["password"];
    $userdata = $user->login($email, $password);
    if (
    $userdata) {
    echo
    "Accesso effettuato con successo";
    } else {
    echo
    "Nessun utente trovato!";
    }
    Come potete capire, le classi si trovano in una pagina, e il richiamo in un altra.
    Ah e per quanto riguarda la classe Database, questa č funzionante ecco perchč non l'ho messa, si trova comunque nella stessa pagina dove si trova la classe user!
    Ultima modifica di ernestocampese : 23-09-2013 alle ore 14.33.02

  2. #2
    L'avatar di saitfainder
    saitfainder non č connesso Sėniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Prova a intercettare l'eventuale errore, altrimenti stiamo qui a tirare ad indovinare.


    «Č una mia peculiaritą distorcere la veritą e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    Guest

    Predefinito

    Si hai ragione, il fatto č che pur lanciando una serie di var_dump() per capire il risultato delle variabili, sembra tutto ok. Stranamente l'inserimento fallisce.

    EDIT

    Altro var_dump() strano risultato...

    Codice PHP:
    /* Metodo per la registrazione dell'accesso */
    public function insert_log($email) {
    // Inizializzo la query
    $stmt = $this->db->stmt_init();
    // Preparo la query
    $stmt->prepare("INSERT INTO table_login (email_login) VALUES (".$email.")");
    // Inserisco i parametri da inviare al database
    echo "<br>";
    var_dump($stmt);
    $stmt->bind_param("s", $email);
    // Eseguo la query
    $stmt->execute();
    }
    Risultato:
    object(mysqli_stmt)#4 (0) { } Accesso effettuato con successo
    object(mysqli_stmt)#3 (0) { }
    Ultima modifica di ernestocampese : 23-09-2013 alle ore 16.51.23

  4. #4
    L'avatar di javascripter
    javascripter non č connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Sono sicuro che se $stmt non fosse l'oggetto mysqli_stmt avresti ricevuto un fatal error.
    Quindi l'errore č altrove e certamente var_dump non č l'unico modo per intercettare eventuali errori.

    Potrebbe anche essere che l'errore sia nella preparazione della query o nella sua esecuzione e i valori di ritorno dei metodi prepare, bind e execute, assieme alle istruzioni di controllo (if, else), possono permetterti di capirlo.
    Inoltre, in caso di qualsiasi errore di sintassi SQL puoi usare mysqli_stmt::$error(_no).

    Questi sono dei semplici 'suggerimenti'.

    Per me l'errore sta in bind_param, dato che in prepare non hai inserito il carattere '?' ma direttamente l'email.

  5. #5
    Guest

    Predefinito

    Che stupido che sono...
    Il problema er proprio quel dannato punto interrogativo!

    Grazie mille ragazzi!
    Ultima modifica di ernestocampese : 23-09-2013 alle ore 21.54.13

Regole di scrittura

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