[英]How to make SQL query more readable in PHP?
当 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');
}
我更喜欢 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 的行为类似于单引号。
现在文档:
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');
}
赫里多克:
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');
}
您可以像这样连接它以使其更具可读性:
$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";
注意:确保在连接查询时,不要忘记在双引号之间开始新行之前留下空格,否则会出现查询无效错误
我使用免费工具@ 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');
}
?>
$sql = "SELECT field1,
field2,
field3 as Field3_Something,
field4,....
FROM table
JOIN table2 AS TNS ON TNS.id = table.id
WHERE something = 1";
这只是另一种方式。
请注意,数组连接比字符串连接更快。
$sql = join(" \n", Array(
'SELECT ',
' [...fields...]',
' [...more fields...]',
'FROM table',
'JOIN table2 AS TNS ON TNS.id = table.id',
'WHERE something = 1',
));
<?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');
}
?>
就个人而言,我认为sprintf
是最好的方法,因为它的结构与某些 SQL 服务器接受的prepared statement
非常相似。
$sql = sprintf(
'SELECT
field1 as something,
field2,
field3 as Field3_Something,
field4,
field5,
field6,
field7,
field8,
field9
FROM table
JOIN table2 AS TNS
ON TNS.id = table.id
WHERE something = %s',
1
);
我尝试使用Heredoc
方法,但如果您使用对象而不仅仅是单个变量,它会使事情复杂化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.