2012-10-08 9 views
8

Cuando tiene un campo largo en la consulta SQL, ¿cómo lo hace más legible?¿Cómo hacer que la consulta SQL sea más legible en PHP?

Por ejemplo:

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

puede ser más específico aquí? – AnandPhadke

+0

tiene algunas sugerencias sólidas aquí. ¿Por qué no elegir una como la respuesta aceptada? –

+0

Seguramente después de 6 meses, se justifica una respuesta. Seleccione una de las sugerencias a continuación. – philwinkle

Respuesta

9

puede concatenar como este para que sea más legible:

$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: Asegúrese mientras concatinating la consulta, no se olvide de dejar espacios antes de comenzar una nueva línea entre las comillas dobles, de lo contrario obtendrá una consulta error no válido

+0

Concatenar SQL puede llevar a puntos y comas fuera de lugar en PHP. A mí me parece feo, prefiero 'sprintf' a esto. – philwinkle

+2

En PHP, puede concatenar con espacio en blanco en varias líneas. Por lo tanto, abra una comilla doble en una línea y termínela en otra línea. No es necesario escribir $ sql. = Varias veces. De esta manera, se ve limpio. –

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

Puedo utilizar una herramienta gratuita @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

prefiero sintaxis Heredoc, aunque nowdoc también funcionaría para su ejemplo:

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

La ventaja con ambos es y Puede copiar y pegar SQL directamente desde y hacia este bloque sin tener que escapar o formatearlo. Si necesitara incluir el análisis sintáctico, como lo haría con las variables de una cadena de comillas dobles, usaría Heredoc. Nowdoc se comporta como comillas simples.

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

Y, FWIW, Sublime Text 2 reconoce esta sintaxis como SQL en lugar de una cadena PHP y cambia inteligentemente el resaltado de sintaxis. Bastante agradable. – philwinkle

+0

mi voto es para este: de alguna manera, esto es exactamente para lo que está hecha la sintaxis heredoc/nowdoc, y darle al editor de código una pista sobre cómo aplicar el resaltado de sintaxis es una buena ventaja. –

+0

Tenga en cuenta que sus ejemplos no funcionarán: el identificador de cierre (SQL) no puede tener ninguna sangría delante de él. – 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

Esta es sólo otra manera.

Tenga en cuenta que la unión de matriz es más rápida que la concatenación de cadenas.

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