2014-12-31 36 views
3

有沒有什麼理由要在編寫代碼時將查詢和結果分開,而不是可讀性?將查詢和結果分開的原因?

實施例是分開的:

$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

+3

這是一個*「對他們自己的」*。 Poh-tay-toe,poh-tah-toe。 –

+7

可讀性似乎相當不錯。另請參閱準備好的陳述。 – Strawberry

+3

對於第一個可能是由於每行字符數量的舊限制。但它不再是一個很好的理由。 – Debflav

回答

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"); 

所有這些填入函數使得難以閱讀和anoying維護以及。

1

給出這個問題的答案。喜歡你想要(或差不多)。

就像我說過的,第一種方式可能是由於歷史原因,我們被限制在80個字符以內。但是這個限制不再存在(而且我們有更大的屏幕)。順便說一句,我不會告訴你每行放300個字符。

使用你感覺更易讀/可維護的那個。唯一的缺點可能是你的同事。他們可以決定你必須使用哪一個。

0

其實你可以在一行中寫下你的整個源代碼。

(最小化源=刪除所有空格和換行)

當然不是字符串

:)

效果是:(1正,3負做到這一點)

  • 可讀性差( - )
  • 解析更快(+)
  • 慢編輯源( - )
  • 沒有良好的可維護性( - )

不寫的一切一行

效果是:(3正1負做到這一點)

  • 良好的可讀性(+)
  • 稍微慢一點解析( - )
  • 快速版iting源(+)
  • 更好的可維護性(+)

(猜你只感到非常大的codefiles差異parsingtime)

這是我決定寫我的源代碼。

有時候(例如插件)我使用最小化版本。

0

我認爲這只是一種偏好。我通常使用簡短的方式和「unvarying」請求。

但對於較長的請求,它更容易閱讀和維護分開。

特別是對於「動態請求」(部分取決於外部條件):它有時更容易在一根繩子上的工作,例如在所有連接一where條款,或其他,或無,取決於條件。
我想到的一個例子是:如果使用get參數?cat=foo進行調用,則使用「list.php」腳本顯示所有文章(如果不帶參數調用),並篩選特定類別「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']}":"")); 

如果添加其他條件,它變得更加難以理解和難以維護。例如,獲取參數'?supplier = bar「的第二個過濾器...

[編輯:]我只是有這樣的情況:當你的請求失敗時,它是更容易調試當查詢站在一個字符串。一個簡單的echo $query;讓你看到你發送到DB服務器到底是什麼...
在下面的PHP代碼:$query="select * from $userTable where id=:uid";,你可能會負責監督$userTable沒有定義...
而是一個echo $query;後,可以沒有監督,這裏有什麼缺失:$query="select * from where id=:uid"; ...

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);