我正在尝试学习面向对象的 mysqli ,我有一个(非常基本的我很确定)问题。我正在遵循指南here
在编写查询时,以下查询之间有什么区别(如果有的话);
第一
$sql = <<<SQL
SELECT *
FROM `users`
WHERE `live` = 1
SQL;
第二
$sql = ("SELECT * FROM users WHERE live = 1");
我想开始,因为我的意思是继续,所以任何建议都表示赞赏。
答案 0 :(得分:4)
第一种是heredoc语法:heredoc
他们都有同样的目的。使用heredoc可以更容易地将静态文本与变量混合,而不必担心字符串连接或使用{$variable}
将变量放在字符串中。
使用heredoc还可以使您的查询多行化,以便更清晰地阅读。
免责声明:我没有广泛使用heredoc,但是对于冗长的查询,它更容易分解并阅读它们。
答案 1 :(得分:0)
我会提倡串联。
$sql = 'SELECT * FROM table WHERE ID = ' . (int)$somevar . ' LIMIT 1';
或者您可以跳过SQL中的串联并改为使用prepared statement。
$sql = 'SELECT * FROM table WHERE ID = ? LIMIT 1';
Heredoc确实允许内联,但它在规则上也更加严格,有时会在编码中产生奇怪的问题,尤其是当你想要缩进代码时(结束字符串必须在一条线上)本身没有缩进)。考虑到在块语句中包含代码时缩进代码被视为最佳实践
// Syntax error
if($something) {
$sql = <<<SQL
SELECT *
FROM `users`
WHERE `live` = 1
SQL;
}
我知道没有主要的开源PHP广泛使用heredoc。大多数编写标准字符串并转义数据或使用预准备语句