Por que colocar a instrução SQL em uma variável antes de usar mysql_query ()?

4

Estou trabalhando com o PHP por algum tempo agora, e vi muitos códigos nos dois sentidos:

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

vs

mysql_query("SELECT…");

Existe uma razão para separar os dois, além de poder passar algo como $ con?

    
por Ryan 06.10.2011 / 05:55
fonte

3 respostas

9

Existem algumas razões para isso:

  1. Legibilidade: pode não se aplicar com um simples mysql_query("SELECT…"); (a propósito, você não deveria usar o PDO? Não é o ano de 1998!). Mas você vê a utilidade disso quando se trata de argumentos multilinhas. Quando você tem vários deles, as coisas ficam ainda mais difíceis de ler.

  2. Refatoração: é realmente insignificante, mas pode se aplicar também. Imagine que você obterá a consulta de um arquivo de configuração em vez de codificá-la. Provavelmente seria mais fácil / mais legível ter uma variável definida primeiro, depois usada como argumento.

  3. Depuração: imagine que a consulta seja gerada (o que você nunca deve fazer, mas é outro assunto). Se você quiser definir o ponto de interrupção depois que a consulta é gerada, mas antes que a consulta seja feita, isso só seria possível se a consulta fosse realmente atribuída a uma variável.

  4. Rastreamento: pode ser um código temporário, e o autor pode saber que ele adicionará o rastreamento de uma consulta posteriormente.

Em outras palavras:

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

se tornará:

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

Possivelmente porque em um ponto o código ficou assim:

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

Caso contrário, não há nenhuma razão técnica convincente para ir de um jeito ou de outro. Eu pessoalmente acho que usar a variável temporária torna o código um pouco tad mais fácil de manter, se você quiser expandir a consulta. Consultas maiores parecem mais fáceis de serem analisadas, se já não estiverem incorporadas em uma chamada de função. Mas isso é apenas minha preferência pessoal.

    
por 06.10.2011 / 06:12
fonte
3

O mais significativo, possibilita a saída da instrução SQL exata; por exemplo,

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

Além disso, quando as coisas ficam complexas, você pode precisar construir a instrução SQL em partes; por exemplo,

$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 );
    
por 06.10.2011 / 10:26
fonte

Tags