如何在PHP中使SQL查询更具可读性?

I'l*_*ack 14 php mysql readability code-readability

当您在SQL查询中有一个长字段时,如何使其更具可读性?

例如:

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');
    }
Run Code Online (Sandbox Code Playgroud)

phi*_*kle 18

我更喜欢Heredoc语法,虽然Nowdoc也适用于你的例子:

定界符:

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

两者的优点是您可以直接将SQL复制并粘贴到此块中,而无需转义或格式化它.如果你需要包括解析,比如你用双引号字符串中的变量,你就会使用Heredoc.Nowdoc的行为类似于单引号.

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');
}
Run Code Online (Sandbox Code Playgroud)

定界符:

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');
}
Run Code Online (Sandbox Code Playgroud)

  • 并且,FWIW,Sublime Text 2将此语法识别为SQL而不是PHP字符串,并智能地切换语法突出显示.挺棒的. (3认同)
  • 请注意,您的示例将不起作用:结束符(SQL)前面不能有任何缩进。 (2认同)

Mr.*_*ien 10

您可以像这样连接它以使其更具可读性:

$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";
Run Code Online (Sandbox Code Playgroud)

注意:确保在查询查询时,请不要忘记在双引号之间开始换行之前留空格,否则您将获得查询无效错误

  • 在PHP中,您可以通过多行连接白色空间.因此,在一行上打开双引号并在另一行中结束.无需编写$ sql.=多次.这样,它看起来很干净. (3认同)

Job*_*ose 9

 $sql = "SELECT field1,
                field2,
                field3 as Field3_Something,
                field4,....
         FROM table
         JOIN table2 AS TNS ON TNS.id = table.id
         WHERE something = 1";
Run Code Online (Sandbox Code Playgroud)