在编写代码时,除了可读性之外,是否有任何理由要将查询和结果分开?
示例分开:
$query = "SELECT * FROM foo ORDER BY foo2 DESC LIMIT 10";
$result = mysqli_query($dbconnect,$query);
与单行相比:
$result = mysqli_query($dbconnect,"SELECT * FROM foo ORDER BY foo2 DESC LIMIT 10");
我通常使用第一个例子,但我发现自己越来越多地使用第二个单行示例,因为它更快更容易编写,所以我想在它成为第二天性之前我会问它然后发现它真的很糟糕可能会炸毁世界或其他东西0.o
答案 0 :(得分:1)
这是一种偏好,但可读性肯定是一个很有道理的理由。但是,我还认为查询的可伸缩性和可维护性也可能是一个合适的参数。假设您有一个复杂的查询,其中多个变量被清理,以便使用连接进行SQL注入。换句话说,一个长查询:
$result = mysqli_query($dbconnect,"SELECT * FROM foo, bar Where col1.bar = (Select col1 From someTable where {$varibale} = ...) Group By ... ORDER BY foo2 DESC LIMIT 10");
将所有内容填充到函数中会使其难以阅读并且难以维护。
答案 1 :(得分:1)
回答这个问题。喜欢(或几乎)。
就像我说的那样,第一种方式可能是因为我们被限制在80个字符的历史。但这种限制不再存在(我们有更大的屏幕)。顺便说一下,我不会告诉你每行放300个字符。
使用您感觉更易读/可维护的那个。唯一的缺点可能是你的同事。他们可以决定你必须使用哪一个。
答案 2 :(得分:0)
实际上你可以把你的整个来源写成一行。
(最小化来源=删除所有空格和换行符)
当然不是字符串:)
效果是:(1为正数,3为负数)
不写所有内容
效果是:(3为正数,1为负数)
(猜猜你只感觉非常大的代码文件中的解析时间差异)
这就是我决定编写源代码的方式。
有时(例如插件)我使用最小化版本。
答案 3 :(得分:0)
我认为这也是一种偏好。我通常使用简短的方式来处理简短的“不变的”请求。
但是对于更长的请求,它更易于单独阅读和维护。
特别是对于 “动态请求” (部分取决于外部条件):有时更容易处理字符串,例如连接where
根据条件,条款或其他条款,或根本没有条款
我想到的一个例子:一个“list.php”脚本,如果没有参数调用,则显示所有文章,如果使用get-parameter ?cat=foo
调用,则过滤特定类别'foo'的文章。
我个人觉得这样更容易阅读和维护:
$query="select name, description, price from articles";
if(isset($_GET['cat'])) $query.=" where cat={$_GET['cat']}";
$result = mysqli_query($dbconnect,$query);
当然也可以使用三元(?:)
运算符直接在单行版本中完成,但是可读性会受到一些影响:
$result = mysqli_query($dbconnect,"select name, description, price from articles".(isset($_GET['cat'])?" where cat={$_GET['cat']}":""));
如果添加其他条件,它将变得非常难以理解且无法维护。例如,get-parameter`?supplier = bar“...
上的第二个过滤器 [编辑:]我刚刚遇到这样的情况:当您的请求失败时,当查询位于字符串中时,更容易调试。一个简单的echo $query;
可以让您准确地看到您发送给数据库服务器的内容...
在下面的PHP代码$query="select * from $userTable where id=:uid";
中,您可能会监督$userTable
未定义...
但在echo $query;
之后,您无法监督此处缺少的内容:$query="select * from where id=:uid";
...
答案 4 :(得分:0)
对我来说,这完全取决于可读性。我写了很多代码。并发布应用程序。 6个月后,当我回去修复一个bug时,我需要快速找到一些东西。我尽可能地分开。除非您编写的代码量非常大,否则解析时间很短。这完全取决于我的可读性。我更进一步,使它尽可能漂亮。
$select = "SELECT x,y,z";
$from = " FROM foo,bar,table3";
$order = " ORDER BY foo2 DESC ";
$limit = " LIMIT 10";
$query = $select . $from . $order . $limit;
$result = mysqli_query($dbconnect,$query);