2012-10-08 16 views
8

Quando si hanno campi lunghi nella query SQL, come si rende più leggibile?Come rendere la query SQL più leggibile in PHP?

Ad esempio:

public function findSomethingByFieldNameId($Id) { 
     $sql = "SELECT field1, field2, field3 as Field3_Something, field4, field5, field6, field7, field8, field9 
         FROM table 
       JOIN table2 AS TNS ON TNS.id = table.id 
         WHERE something = 1"; 
return $this->db->fetchData($sql, null, 'all'); 
    } 
+0

puoi essere più specifico qui? – AnandPhadke

+0

hai alcuni suggerimenti validi qui - perché non sceglierne uno come risposta accettata? –

+0

Sicuramente dopo 6 mesi una risposta è giustificata. Seleziona uno dei seguenti suggerimenti. – philwinkle

risposta

9

è possibile concatenare in questo modo per renderlo più leggibile:

$sql = "SELECT field1, field2, field3 as Field3_Something,"; 
$sql.= " field4, field5, field6, field7, field8, field9"; 
$sql.= " FROM table JOIN table2 AS TNS ON TNS.id = table.id"; 
$sql.= " WHERE something = 1"; 

Nota: Assicurarsi mentre concatinating la tua ricerca, non dimenticate di lasciare spazi prima di iniziare una nuova riga tra le doppie virgolette, altrimenti riceverai l'errore non valido della query

+0

La concatenazione di SQL può portare a punti e virgola errati in PHP. Mi sembra brutto - preferirei "sprintf" a questo. – philwinkle

+2

In PHP, è possibile concatenare lo spazio bianco su più righe. Quindi, apri una virgola doppia su una linea e terminala in un'altra linea. Non è necessario scrivere $ sql. = Più volte. In questo modo, sembra pulito. –

0
$sql = "SELECT field1, 
       field2, 
       field3 as Field3_Something, 
       field4,.... 
     FROM table 
     JOIN table2 AS TNS ON TNS.id = table.id 
     WHERE something = 1"; 
3

Io uso uno strumento gratuito @http://www.sqlinform.com

<?php 
public function findSomethingByFieldNameId($Id) { 
    $sql = "SELECT field1     , 
        field2     , 
        field3 AS Field3_Something, 
        field4     , 
        field5     , 
        field6     , 
        field7     , 
        field8     , 
        field9 
      FROM TABLE 
        JOIN table2 AS TNS 
        ON TNS.id = table.id 
      WHERE something = 1"; 

    return $this->db->fetchData($sql, null, 'all'); 
} 
?> 
13

preferisco la sintassi heredoc, anche se Nowdoc potrebbe funzionare anche per il tuo esempio:

heredoc:

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

Nowdoc: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc

Il vantaggio con entrambi è y Puoi copiare e incollare direttamente SQL da e verso questo blocco senza doverlo scappare o formattare. Se fosse necessario includere l'analisi, come si farebbe con le variabili di una stringa con doppia citazione, si utilizzerà Heredoc. Nowdoc si comporta come virgolette singole.

Nowdoc:

public function findSomethingByFieldNameId($Id) { 
    $sql = <<<'SQL' 
    SELECT field1, field2, field3 as Field3_Something, field4, field5, field6, field7, field8, field9 
    FROM table 
    JOIN table2 AS TNS ON TNS.id = table.id 
    WHERE something = 1 
SQL; 

    return $this->db->fetchData($sql, null, 'all'); 
} 

heredoc:

public function findSomethingByFieldNameId($Id) { 
    $sql = <<<SQL 
    SELECT field1, field2, field3 as Field3_Something, field4, field5, field6, field7, field8, field9 
    FROM table 
    JOIN table2 AS TNS ON TNS.id = table.id 
    WHERE something = '$Id' 
SQL; 

    $sql = mysql_real_escape_string($sql); 

    return $this->db->fetchData($sql, null, 'all'); 
} 
+3

E, FWIW, Sublime Text 2 riconosce questa sintassi come SQL invece di una stringa PHP e cambia l'evidenziazione della sintassi in modo intelligente. Molto carino. – philwinkle

+0

il mio voto è per questo - in un certo senso questo è esattamente ciò che la sintassi heredoc/nowdoc è fatta, e dare al proprio editor di codice uno spunto su come applicare l'evidenziazione della sintassi è un bel bonus. –

+0

Nota che i tuoi esempi non funzioneranno: l'identificatore di chiusura (SQL) non può avere alcun rientro di fronte ad esso. – nullability

0
<?php 
    public function findSomethingByFieldNameId($Id) { 
     $sql = "SELECT 
        field1, 
        field2, 
        field3 as Field3_Something, 
        field4, 
        field5, 
        field6, 
        field7, 
        field8, 
        field9 
       FROM 
        table 
       JOIN table2 AS TNS 
        ON TNS.id = table.id 
       WHERE 
        something = 1"; 
     return $this->db->fetchData($sql, null, 'all'); 
} 
?> 
0

Questo è solo un altro modo.

Si noti che il join di matrice è più rapido della concatenazione di stringhe.

$sql = join(" \n", Array(
    'SELECT ', 
    ' [...fields...]', 
    ' [...more fields...]', 
    'FROM table', 
    'JOIN table2 AS TNS ON TNS.id = table.id', 
    'WHERE something = 1', 
)); 
Problemi correlati