Visualizzazione risultati 1 fino 17 di 17

Discussione: Problemi con query sql.

  1. #1
    Guest

    Predefinito Problemi con query sql.

    Salve a tutti, è il primo messaggio che scrivo.
    Ho un account gratuito con cui sto facendo esercizi per imparare ad gestire un dabatase mysql.

    Nel tentativo di passare la query:

    Codice PHP:
    $result = mysql_query("SELECT utenti.* FROM 'utenti'
    WHERE utenti.username='
    $usrnm'
    AND utenti.password='
    $pssw'")or die(mysql_error());
    Mi esce il seguente errore e, purtroppo non ho trovato soluzione:

    Codice PHP:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''utenti' WHERE utenti.username='' AND utenti.password=''' at line 1
    Sapeste indicarmi qual'è il problema??

    Grazie in anticipo.

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Gli apici attorno al nome della tabella devono essere `...`, e non '...'

  3. #3
    Guest

    Predefinito

    Non ci posso credere, questa non me la aspettavo proprio.
    Come si fanno quegli apici???

    edit:

    Adesso non da più l'errore però ho notato un problema. Seppure i valori che immetto nel form corrispondano a quelli registrati del database la query non da nessun risultato, per quale motivo??
    Ho provato a passare i valori dentro le funzioni trim e stripslashes ma il problema persiste.

    Codice PHP:
    if(isset($_POST['accesso'])){

    $usrnm = stripslashes(trim($_POST['username']));
    $pssw = stripslashes(trim($_POST['pssw']));
    $result = $this->action("
    SELECT utenti.* FROM `utenti` WHERE utenti.username='
    $usrnm' AND utenti.password='$pssw'");

    if(
    mysql_num_rows($result) != 1){
    print
    "I dati inseriti non sono corretti";
    $num = mysql_num_rows($result);
    print
    ' Contati: '.$num.' '.$usrnm.' '.$pssw;
    }else{
    $data = mysql_fetch_array($result);
    print
    "Dati corretti";
    }
    Ultima modifica di dreadnaut : 23-05-2012 alle ore 20.45.45 Motivo: se devi aggiungere qualcosa, usa il tasto Edita --->

  4. #4
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Citazione Originalmente inviato da letsgetout Visualizza messaggio
    Come si fanno quegli apici???
    Con un layout di tastiera non italiano, oppure aggiungendoli al layout che usi di solito.

    Nella maggior parte dei casi però, puoi semplicemente omettere gli apici. Sono necessari solo se il nome della tabella o della colonna è una delle parole chiavi di mysql —ad esempio, se hai una colonna chiamata select.

    Citazione Originalmente inviato da letsgetout Visualizza messaggio
    Adesso non da più l'errore però ho notato un problema. Seppure i valori che immetto nel form corrispondano a quelli registrati del database la query non da nessun risultato, per quale motivo??
    Magari stampa nella pagina sia la query eseguita che il suo risultato, in modo da sapere se estrai e controlli i dati corretti.

  5. #5
    Guest

    Predefinito

    Allora la query è quella scritta nel messaggio sopra,
    Il risultato è la stampa:

    I dati inseriti non sono corretti Contati:

    In poche parole entra sempre dentro al primo if, cioè la funzione mysql_num_rows($result) restituisce sempre un valore nullo, come si vede dalla stampa stessa "Contatti: ".
    Ho provato anche a usare la query "SELECT * FROM utenti" ma ottengo lo stesso risultato.
    Nella tabella un utente inserito lo ho, ma nonostante ciò non riesco ad ottenere i dati.
    Ho notato che, a causa di inserimenti e successive cancellazioni di record dalla tabella utenti, il campo user_id, con impostazione auto_increment, non si è resettato e pur avendo un solo record mostra come user_id un valore diverso da 1, cioè il conteggio di tutti i record inseriti, senza escludere quelli precedentemente cancellati.

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Citazione Originalmente inviato da letsgetout Visualizza messaggio
    Allora la query è quella scritta nel messaggio sopra,
    Il risultato è la stampa:

    I dati inseriti non sono corretti Contati:
    La query che esegui non è quella scritta sopra, ma quella scritta sopra dopo la sostituzione delle variabili. E' quella che devi controllare.

    Il risultato non è la stampa di quella frase. Il risultato sono le righe che la query ti restituisce. Puoi recuperarle con mysql_fetch_row() e stamparle nella pagina con print_r() ed un semplice while.
    Codice PHP:
    while ($riga = mysql_fetch_row($result))
    print_r($riga);
    Non puoi aspettarti di debuggare del codice fissandolo intensamente

    Citazione Originalmente inviato da letsgetout Visualizza messaggio
    Ho notato che, a causa di inserimenti e successive cancellazioni di record dalla tabella utenti, il campo user_id, con impostazione auto_increment, non si è resettato e pur avendo un solo record mostra come user_id un valore diverso da 1, cioè il conteggio di tutti i record inseriti, senza escludere quelli precedentemente cancellati.
    Quello è ok, è il normale funzionamento dei campi auto_increment.

  7. #7
    Guest

    Predefinito

    Allora, ho provato a stampare la stringa della query con print il risultato è:

    SELECT * FROM utenti WHERE utenti.username='pollo'

    Mentre il ciclo while non stampa nulla.

  8. #8
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Chi è $this in questa situazione? C'è un oggetto attorno allo spezzone di codice che hai postato?

    Prova a rendere visibili tutti gli errori, mettendo questa chiamata all'inizio del tuo script
    Codice PHP:
    error_reporting(E_ALL);
    Ultima modifica di dreadnaut : 24-05-2012 alle ore 14.29.25

  9. #9
    Guest

    Predefinito

    $this è l'oggetto creato nel file html, chiamato accesso.html, in cui creo un oggetto $login = new login();
    La classe login contiene la funzione che esegue la query, ma per eseguirla chiama la sua funzione $this->action($query) che eredita dalla classe mysqlclass.

    Ho inserito error_reporting(E_ALL); direttamente nel file html che chiama i vari file php.
    Prima di tutto ottengo:

    Notice: Undefined variable: PHP_SELF in /membri/letsgetout/login.php on line 54

    Poi, inserendo dati nei form:

    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /membri/letsgetout/login.php on line 24

    SELECT * FROM utenti WHERE utenti.username=''

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /membri/letsgetout/login.php on line 28
    I dati inseriti non sono corretti
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /membri/letsgetout/login.php on line 30
    Nome
    Ultima modifica di letsgetout : 24-05-2012 alle ore 14.58.22

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Uhm, cosa restituisce $action? Per qualche motivo, non sembra essere del tipo corretto (a valid MySQL result resource).

  11. #11
    Guest

    Predefinito

    La funzione è:

    Codice PHP:
    public function action($query){
    return
    mysql_query($query);
    }
    Provo ad invocare la funzione mysql direttamente.

  12. #12
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Quello non dovrebbe fare una differenza. Controlla l'altro errore alla linea 54, e poi vedi se si risolve qualcosa —sempre aggiustare cose nell'ordine in cui non funzionano.

  13. #13
    Guest

    Predefinito

    Invece stranamente ho chiamato direttamente la funzione mysql_query e funziona!!!
    Per quale assurdo motivo fa così?

  14. #14
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Probabilmente quel $this->action() non chiama la funzione che ti aspetti.

  15. #15
    Guest

    Predefinito

    Perchè non dovrebbe chiamarla??
    Sembrerebbe di sì, infatti quando si sono verificati errori si sintassi nella query me lo ha chiaramente stampato a video grazie a or die(mysql_error()), quindi la funzione che chiamava era quella per forza.

    Ho provato, invece di ritornare direttamente il risultato di mysql_query(), a salvarlo in una variabile e ritornare la stessa. Ora funziona!

    Mistero

  16. #16
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,269

    Predefinito

    Prova a mettere un echo nella tua funzione action() e guarda se viene visualizzato. Avendo una classe che eredita da un'altra classe, a seconda di come l'hai definita potresti finire per chiamare il metodo action della classe parent, che magari si comporta diversamente.

  17. #17
    Guest

    Predefinito

    Viene chiamata per forza action della sopraclasse, infatti ora uso una variabile per il return e funziona tutto.
    Magari più tardi provo a usare un nome meno ambiguo.

    Comunque grazie per il suo supporto, posso dire di avere risolto i miei problemi :D

Regole di scrittura

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