Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: A cosa serve EOQ; ?

  1. #1
    Utente di HTML.it L'avatar di ercoli
    Registrato dal
    Mar 2002
    Messaggi
    173

    A cosa serve EOQ; ?

    Grazie a quanti vorranno rispondermi.

    Non sono particolarmente spigliato con PHP.
    Incontro questa query e non mi spiego il significato di
    codice:
    <<<EOQ
    e
    codice:
    EOQ
    in chiusura della query.
    E poi, non mancano gli apici o le virgolette?

    $query = <<<EOQ
    SELECT *
    FROM tabella
    WHERE id_regione = '$regione'
    EOQ;

    Ciao a tutti.

  2. #2

  3. #3
    Utente di HTML.it L'avatar di ercoli
    Registrato dal
    Mar 2002
    Messaggi
    173
    Dopo aver googlato un po' mi son risposto da solo: heredoc!
    Grazie comunque.

  4. #4
    l'heredoc è una pratica molto comune ed è usata, generalmente, in sostituzione agli apici doppi in quanto permette, come per gli apici doppi, di inserire variabili.

    Visto che siamo in tema di heredoc e query ... dico la mia :P

    Generalmente quando scrivo delle query, personalmente, utilizzo i normali apici doppi perché l'heredoc non permette l'uso di concatenazioni di stringhe e quindi di operatori ternari! Per fare la stessa cosa con l'heredoc dovrei usare degli if rendendo praticamente illeggibile la query.

    Per intenderci, se devi costruire una query che varia in base a delle specifiche condizioni devi interrompere l'heredoc, fare un if, scrivere il codice della query, possibilmente/probabilmente dentro un altro heredoc ed infine fare ripartire l'heredoc della query creando non poca confusione.
    Tutta questa trafila per ogni condizione che ti modifica strutturalmente la query.

    Un esempio di una query con un operatore ternario nel mezzo può essere ad esempio:
    codice:
    $query = "
        SELECT
            t2.*
        
        FROM
            tabella1 AS t1
            INNER JOIN tabella2 AS t2 ON
            (
                t2.tabella2_tabella1_id = t1.tabella1_id" . ($t2SoloConfermati == true ? "
                AND
                t2.confermati = 'Si'" : '') . "
            )
        
        WHERE
            t1.eliminati = 'No'" . ($t1SoloConfermati == true ? "
            AND
            t1.confermati = 'Si'" : '');
    Questa query, come puoi vedere tu stesso, è perfettamente leggibile e comprensibile anche se varia dinamicamente ... scritto cosi, non da minimamente fastidio alla leggibilità! Se si dovesse usare un heredoc la query dovrebbe essere tagliata più volte nel mezzo

    Quindi il mio consiglio è di non usare l'heredoc per le query

  5. #5
    Io invece sono contrario all'uso di concatenazione di stringhe ed espressioni, in quanto - a mio modo di vedere - la cosa compromette tantissimo la leggibilita'. Quello che preferisco fare e' fare tutti i controlli prima, creare delle variabili apposta e mantenere le stringhe il piu' lineari possibile.

    In pratica scriverei cosi' la query sopra:
    Codice PHP:
    $condizione1 = ($t2SoloConfermati == true " AND t2.confermati = 'Si'" '');
    $condizione2 = ($t1SoloConfermati == true " AND t1.confermati = 'Si'" '');

    $query "SELECT t2.*
              FROM tabella1 AS t1
              INNER JOIN tabella2 AS t2 ON
              (
                  t2.tabella2_tabella1_id = t1.tabella1_id
                  
    $condizione1 
              )
              WHERE
                  t1.eliminati = 'No'
                  
    $condizione2"
    ovviamente cercando di dare alle variabili nomi significativi. Usando un editor con un corretto syntax highlighting si individuano subito le variabili, il tutto e' molto piu' conciso e non ci sono confusioni con virgolette aperte e chiuse.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    570
    concordo con k.b, il codice in quel modo è molto più mantenibile oltretutto, visto che i parametri che compongono la stringa vengono presumibilmente elaborati tutti prima e non devo preoccuparmi poi di controllare il tutto al suo interno.

    oltretutto è molto più leggibile una stringa che contiene solo variabili piuttosto che una vagonata di ternari
    sometimes it's just like teaching pigs how to fly

  7. #7
    Alla fine e' lo stesso concetto del mescolare HTML e PHP: se separi elaborazioni e rappresentazione del risultato hai codice piu' chiaro e piu' facile da modificare.

  8. #8
    il codice per come lo hai postato tu, non mostra la query TUTTA per intero, non mostra la query di fila, con le condizioni posizionate dove effettivamente sono usate bensì mostra le condizioni prima e poi la query

    per un fattore di leggibilità, penso, che il fatto che la query sia tutta lì, in blocco ed insieme, è importante

    ovviamente le condizioni vanno preimpostate senno si fa confusione

    se le metti di fianco, l'una all'altra, con la query che hai postato devo cercare dove sono le condizioni nel codice SQL e se faccio variazioni sotto, alla query, devo andare su a rifarle anche alla condizione scritta a parte.

    Con il codice che ho postato, benché ovviamente la condizione deve essere modificata, è messa li, insieme al codice che stai modificando.

    Poi ovviamente è una cosa personale, però credo che avere tutta la query insieme sia fondamentale

    PS: mescolare codice php e codice html non è sbagliato perché php è nato come script per il parsing dei template e benché si sia evoluto mantiene questa natura ... è sbagliato, piuttosto, mescolare logica e presentazione ... ma se nella presentazione usi codice php per visualizzare i dati al posto di un linguaggio "personal" è la stessa cosa ... si legge in giro di non mischiare codice php e html non perché è sbagliato farlo ma perché chi lo fa nel 99.99% dei casi mischia la logica (che è composta ovviamente da php) con la presentazione (che è codice php e html) rendendo complicata qualsiasi tipo di modifica alla presentazione o alla logica

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    570
    le condizioni di norma sono subito prima la query.

    resta il fatto è che dando un'occhiata rapida alla query scritta in quel modo non capisco esattamente cosa stia facendo perchè è pieno di if in mezzo, mentre scrivendola nell'altro modo è più semplice da leggere
    sometimes it's just like teaching pigs how to fly

  10. #10
    Originariamente inviato da nickcv
    le condizioni di norma sono subito prima la query.

    resta il fatto è che dando un'occhiata rapida alla query scritta in quel modo non capisco esattamente cosa stia facendo perchè è pieno di if in mezzo, mentre scrivendola nell'altro modo è più semplice da leggere
    "pieno di if in mezzo -> 2 condizioni ternarie messe tra parentesi e che, tra l'altro, finiscono sulla destra e non in mezzo al testo della query

    comunque, ripeto, poi è una cosa molto personale ^^

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.