[PHP] Problema creazione query a numero di parametri variabile

Discussione in 'PHP' iniziata da Lollo82, 5 Dicembre 2017.

  1. Lollo82

    Lollo82 Nuovo Utente

    Registrato:
    8 Ottobre 2017
    Messaggi:
    4
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Buongiorno ragazzi. Non sapevo dove postare la domanda trattandosi della creazione di una query. Ma essendo il problema la creazione della stringa ho reputato più corretto inserirla nella sezione php e non mysql. Se ho sbagliato chiedo scusa...
    Veniamo al dunque... Eseguo una query di SELECT su una colonna di una tabella. E i risultati di tale query che possono essere uno, due o al massimo tre valori saranno il WHERE di una query successiva. I risultati della prima query li memorizzo all'interno di un array.
    La mia difficoltà è... Come creo la query con un numero di WHERE che può variare??? L'idea di partenza era di usare il foreach concatenando OR id...=$array. Ma dopo il WHERE mi ritroverei un OR seguito da nulla...
    Sicuramente la soluzione è la più stupida del mondo, ma vi giuro... Non mi viene. E non so manco cosa potrei googolare.
    Grazie mille a tutti ragazzi.
     
  2. Lollo82

    Lollo82 Nuovo Utente

    Registrato:
    8 Ottobre 2017
    Messaggi:
    4
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Buonasera ragazzi. Ho risolto reparando i valori dell'array con la virgola utilizzando implode e ho passato la variabile alla clausula WHERE utilizzando id... IN (%variabile)
    Grazie mille lo stesso e scusate il disturbo.
     
  3. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    57
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Anche se risolto potresti provare questo:
    NB: Ricorda di inserire i "QUOT" in caso di stringa!
    PHP:

    $string_query
    ='SELECT * FROM my_tbl WHERE';

    $input=['id'=>1,'name'=>'giorgio','stato'=>0];
    $string_query.=crea_query($input);

    $input=['id'=>1,'id'=>2,'id'=>1000,...];
    $string_query.=crea_query($input,'OR');

    function 
    crea_query($input,$type='AND'){
    $string='';
       foreach(
    $input as $k=>$v){
           
    $string.=' '.$type.' '.$k.' = '.$v;
       }
    return 
    $string;
    }

     
  4. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.769
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    un altro metodo può essere questo
    se nel WHERE metti 1=1 ,sempre vero, e le varie clausole non vengono scritte in pratica è come non scrivere il WHERE, ti schematizzo
    PHP:
    //...
    $we1=$we2="";
    //esempio valorizzi i $weXY da un $_POST
    if(!empty($uno)){$we1=" OR uno=\"$uno\"";}
    if(!empty(
    $due)){$we2=" OR due=\"$due\"";}
    //e quanti altri servono
    $query ="SELECT * FROM tabelle WHERE 1=1 $we1 $we2";
    //....
    in questo modo puoi combnare gli OR don gli AND e non ti rimane un OR o un AND sul fondo
     
  5. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    57
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Si ma in questo modo non lanci una injection?
    Credo che in termini di sicurezza sia meglio utilizzare un prepared statement per effettuare la query, passando i valori e il tipo di dato.
     
  6. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.769
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    guarda che ho semplificato è solo uno schema
     
  7. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    57
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Sorry!
     
Sto caricando...

Condividi questa Pagina