2014-02-20 44 views
1

如何避免對SQL語句使用Heredoc字符串分隔符?或者更好的問題,在PHP中創建和調用SQL語句的現代方法是什麼?如何避免Heredoc SQL語句

我對PHP比較陌生。我經常看到這樣的事情在項目我工作:

 $sql = <<<SQL 
SELECT 
    `data`.`key`, 
FROM `tableName` 
ORDER BY `data`.`key` 
SQL; 

當研究更多關於定界符(我不得不使用SO symbol reference後發現這是什麼所謂)我的感覺是,有更好的方法制作SQL語句。對於Exapmle SO用戶來說,他們會使用Heredoc for SQL「back in the day」。

使用Heredoc似乎不是最好的解決方案,因爲格式更改很少可以mess it up。不能縮進結束標籤會使代碼更難讀取和格式化。這也似乎只是使用Heredoc鼓勵用SQL語句和邏輯亂丟代碼。

這只是'這樣做'或有更好的方法嗎?

This question about managing your SQL queries是來自6年前。 PDO or an ORM are mentioned in this answer從5年前。這些仍然是最好的方法嗎?

+0

heredoc語句只是引用您的字符串而不使用引號的一種方式。你可以使用任何你喜歡的方法。當字符串中有多行時,Heredoc就很常見。 –

+1

這是一件好事,SQL不關心這種陳舊的格式。 – user2864740

+2

您不必使用heredoc - 您可以使用帶引號的字符串代替。 heredoc獲得的唯一東西是不必內部地逃脫引號。但是,如果您正在使用準備好的陳述,那麼您不應該經常需要那樣做。 –

回答

2

您的HEREDOC語句沒有任何問題,但這裏是另一種通過引用字符串來創建$sql變量的方法。

$sql = "SELECT `data`.`key`, FROM `tableName` ORDER BY `data`.`key`"; 

在需要額外的可讀性,您可以利用的事實,即空白被忽略,不再陳述的情況:

$sql = "SELECT `data`.`key`, 
    FROM `tableName` 
    ORDER BY `data`.`key`"; 

也可以考慮在面向對象的使用PDO的數據庫交互方式:http://www.php.net/PDO