PHP查询结构

时间:2015-07-02 16:01:18

标签: php mysql

我正在尝试学习面向对象的 mysqli ,我有一个(非常基本的我很确定)问题。我正在遵循指南here

在编写查询时,以下查询之间有什么区别(如果有的话);

第一

$sql = <<<SQL
    SELECT *
    FROM `users`
    WHERE `live` = 1 
SQL;

第二

$sql = ("SELECT * FROM users WHERE live = 1");

我想开始,因为我的意思是继续,所以任何建议都表示赞赏。

2 个答案:

答案 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。大多数编写标准字符串并转义数据或使用预准备语句