2015-07-02 97 views
0

我想學習面向對象mysqli我有一個(很基本,我敢肯定)的問題。我遵循指南herePHP查詢結構

當談到編寫查詢時,以下查詢之間有什麼區別(如果有的話);

首先

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

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

我想開始我的意思去所以任何建議表示讚賞。

+0

您是否在問PHP或SQL的區別? – chris85

+0

您應該從PDO/mysqlnd ....開始.... mysqli幾乎不推薦使用。 – winmutt

+1

@winmutt不正確的'mysqli'不被棄用,'mysql_'是。 – chris85

回答

4

首先是定界符:heredoc

他們都達到同樣的目的。使用heredoc可以更輕鬆地將靜態文本與變量混合在一起,而無需擔心字符串連接或使用{$variable}在字符串中包含變量。

使用heredoc還允許以更簡潔的方式使查詢更容易閱讀。

免責聲明:我沒有用定界符廣泛,但冗長的查詢它可以更容易打破的線條和閱讀:)

+0

Thanks @BlunT我從來沒有聽說過這個,但我現在正在閱讀。我不確定哪一個我會決定去,但至少我的問題是回答! –

+0

您也可以使用多行雙引號。 –

+0

@DaveChen你是對的,它只是看起來更清潔與heredoc :) – BlunT

0

我會主張串聯方法。

$sql = 'SELECT * FROM table WHERE ID = ' . (int)$somevar . ' LIMIT 1'; 

或者你可以跳過SQL的級聯和使用prepared statement代替。

​​

定界符確實允許內聯,但它也是對規則更加嚴格,有時產生在編碼奇怪的問題,尤其是當你要縮進代碼(收盤字符串必須是一行本身沒有縮進)。考慮到它被認爲是最好的做法,你縮進代碼,當你有一個塊語句

// Syntax error 
if($something) { 
    $sql = <<<SQL 
     SELECT * 
     FROM `users` 
     WHERE `live` = 1 
    SQL; 
} 

我不知道主要的開源PHP是廣泛使用定界符的內部代碼。大多數編寫標準字符串,或者轉義數據或使用預準備語句

+0

我認爲串聯作爲構建動態查詢的手段,而不是連接參數。但我完全討厭這個。符號。我更喜歡這個:'$ var =「SELECT * FROM {$ mytable}」;' – BlunT