Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258

    Stampa SQL con dentro array

    Dovrei avere un risultato del genere:
    codice:
    sql = "SELECT * FROM colori where colore<>'bianco' and colore<>'rosso' "
    "bianco" e "rosso" sono 2 valori di esempio di un array che potrebbe essere anche di 10 elementi:

    dovrei rendere tutto dinamico ma mi sono incartato:
    codice:
    $sql = "SELECT * FROM colori where ";
    
    foreach( $arrayColore as $ValoreColore)
    {
    $sqlColore1 = $sql . "colore<>'" . $ValoreColore;
    }
    
    echo $sqlColore1;

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Ti mancano gli "and" nel generare la query e fa anche attenzione a mettere gli spazi nelle stringhe per evitare cose tipo

    "where colore<>'bianco'andcolore<>'rosso'..."
    in cui andcolore ti darebbe errore di sintassi.

    Altra cosa, scritta così, ad ogni ciclo $sqlColore1 viene sovrascritta, quindi alla fine avresti solo l'ultimo valore, i precedenti vanno persi, devi concatenare i vari pezzi, e ti basta usare la variabile $sql per farlo.

  3. #3
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Si, ma non è un problema di spazi ma proprio che mi sono incartato, ti spiego meglio

    in questo modo se stampassi l'sql a video sarebbe:
    codice:
    SELECT * FROM colori where colore<>'rosso'
    invece di:
    codice:
    SELECT * FROM colori where colore<>'bianco' and colore<>'rosso'
    ovvero mi stampa solo l'ultimo valore dell'array.

  4. #4
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Ok, credo di essere riuscito a fare progressi:

    codice:
    $sql ="SELECT * FROM colori where ";
    
    foreach( $arrayColore as $ValoreColore)
    {
    $sqlColore1 = $sqlColore1 . " colore<>'" . $ValoreColore . " and ";
    }
    $sqlColoreCompleto = $sql . $sqlColore1;
    l'unico problema è che mi lascia l'and finale:
    codice:
    SELECT * FROM colori where colore<>'bianco' and colore<>'rosso' and
    

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Per esempio

    Codice PHP:
    $sql ="SELECT * FROM colori where ";

    foreach( 
    $arrayColore as $ValoreColore)
    {
        
    $sql .= " colore<>'" $ValoreColore "' and ";
    }

    $sql substr($sql0, -4);

    echo 
    $sql

  6. #6
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    ah ok, ancora non conoscevo substr; quindi elimini gli ultimi 4 caratteri (-4) per non far comparire l'ultmo and.

    Grazie mille.

  7. #7
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Per esempio

    Codice PHP:
    $sql ="SELECT * FROM colori where ";

    foreach( 
    $arrayColore as $ValoreColore)
    {
        
    $sql .= " colore<>'" $ValoreColore "' and ";
    }

    $sql substr($sql0, -4);

    echo 
    $sql
    Questa query andrà in errore se $arrayColore è vuoto. Se poi $arrayColore non è mai vuoto, puoi anche usarla.



    Un'alternativa, che non richiede substr(), potrebbe essere:
    Codice PHP:
    $sql ="SELECT * FROM colori where 1=1 ";

    foreach( 
    $arrayColore as $ValoreColore)
    {
        
    $sql .= " and colore!='" addslashes($ValoreColore) . "' ";
    }

    echo 
    $sql

  8. #8
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    In questo modo però avrò l'and all'inizio che non mi fa funzionare la query, giusto?

    così:

    codice:
    SELECT * FROM colori where and colore<>'rosso'...

  9. #9
    Quote Originariamente inviata da Luca1317 Visualizza il messaggio
    In questo modo però avrò l'and all'inizio che non mi fa funzionare la query, giusto?

    così:

    codice:
    SELECT * FROM colori where and colore<>'rosso'...
    Non proprio.

    Avrai:
    codice:
    SELECT * FROM colori where 1=1 and colore<>'rosso'...
    E se l'array dei colori sarà vuoto, perché magari in taluni casi non vuoi escludere nessun colore, la query diventerà:
    codice:
    SELECT * FROM colori where 1=1
    Che resta una query sintatticamente corretta, a differenza della query:
    codice:
    SELECT * FROM colori where
    Che invece genererebbe un errore.

  10. #10
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Ah giusto, non avevo visto il where 1=1

    Ho da poco cominciato a programmare in PHP dopo anni di ASP e, a differenza di quando iniziai dove il motto era "basta che funzioni", sto cercando di fare le cose per bene già dall'inizio.

    Quindi, non è per criticare eh, se qualcuno vedesse il codice potrebbe essere oggetto di critica?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.