Perché inserire istruzioni SQL in una variabile prima di utilizzare mysql_query ()?

4

Sto lavorando con PHP per un po 'e un po' ora, e ho visto un sacco di codice in entrambi i modi:

$sql = "SELECT …"; 
mysql_query($sql);

vs

mysql_query("SELECT…");

C'è una ragione per separare i due, oltre a essere in grado di passare anche qualcosa come $ con?

    
posta Ryan 06.10.2011 - 05:55
fonte

3 risposte

9

Ci sono alcuni motivi per farlo:

  1. Leggibilità: potrebbe non essere applicabile con un semplice mysql_query("SELECT…"); (a proposito, non ti aspetti di usare PDO? Non è l'anno 1998!). Ma vedi l'utilità di questo quando si tratta di argomenti multilinea. Quando ne hai diversi, le cose diventano ancora più difficili da leggere.

  2. Refactoring: è davvero secondario, ma può essere applicato anche. Immagina di ottenere la query da un file di configurazione invece di codificarla. Probabilmente sarebbe più facile / più leggibile avere una variabile definita per prima, poi usata come argomento.

  3. Debug: immagina che la query sia generata (la cosa che non devi mai fare, ma bene, è un altro argomento). Se si desidera impostare il punto di interruzione dopo che la query è stata generata ma prima che la query sia stata eseguita, sarebbe possibile farlo solo se la query è effettivamente assegnata a una variabile.

  4. Traccia: potrebbe trattarsi di un codice temporaneo e l'autore potrebbe sapere che aggiungerà la traccia di una query in un secondo momento.

In altre parole:

$sql = "SELECT …";
mysql_query($sql);

diventerà:

$sql = "SELECT …";
$this->trace(123, TRACE_INFORMATION, 'Running the query ' . $sql . '.');
mysql_query($sql);
    
risposta data 06.10.2011 - 07:31
fonte
18

Forse perché a un certo punto il codice era simile a questo:

$sql = "SELECT …";  
echo $sql; //why is this <censored> query not working???????
mysql_query($sql);

Altrimenti, non c'è una ragione tecnica convincente per andare in un modo o nell'altro. Personalmente trovo che usare la variabile temporanea rende il codice un tad un po 'più facile da mantenere, se è necessario espandere la query. Le query più grandi sembrano più facili da guardare se non sono già incorporate in una chiamata di funzione. Ma questa è solo la mia preferenza personale.

    
risposta data 06.10.2011 - 06:12
fonte
3

Più significativo, rende possibile l'output dell'istruzione SQL esatta; per es.

$S_BAG = "select * from BAG where NUMBER=" . $N ;
DebugLog( "S_BAG = " . $S_BAG );
mysql_query( $S_BAG );

Inoltre, quando le cose diventano complesse potrebbe essere necessario costruire l'istruzione SQL in parti; per es.

$S_SELECT = "select ..."
if ( ... ) $S_WHERE = "where ...";
else $S_WHERE = "where ...";
$S_ORDER = "order by ..."
$SQL = $S_SELECT . " " . $S_WHERE . " " . $S_ORDER ;
DebugLog( "SQL", $SQL );
mysql_query( $SQL );
    
risposta data 06.10.2011 - 10:26
fonte

Leggi altre domande sui tag