我有這樣的代碼(刪除PARAM逃逸只是削減了一些代碼):PHP MySQL如何組織這段代碼?
private function _get_tag_id($value)
{
$sql = "INSERT INTO tags (tag, added) VALUES ('$value', ".time().") "
. "ON DUPLICATE KEY UPDATE tag_id = tag_id";
$id = execute($sql);
if (empty($id))
{
$sql = "SELECT tag_id FROM tags WHERE tag = '$value'";
$id = execute($sql);
}
return $id;
}
我在整理我的代碼真的不好,我一直在閱讀關於保持你的代碼乾的重要性。這是否包括您可能有的任何疑問?例如,我需要執行這些相同的查詢了幾場,和我做了什麼是它改成這樣:
private function _get_field_id($field, $value)
{
$sql = "INSERT INTO {$field}s ({$field}, added) VALUES ('$value', ".time().") "
. "ON DUPLICATE KEY UPDATE {$field}_id = {$field}_id";
$id = execute($sql);
if (empty($id))
{
$sql = "SELECT {$field}_id FROM {$field}s WHERE {$field} = '$value'";
$id = execute($sql);
}
return $id;
}
雖然減少了一些類似的功能,這也使得查詢更難閱讀首先。這樣做後的另一個問題是,如果有時查詢可能會略微不同的字段?比方說,如果該字段是標籤,我不需要添加的列更多的,也許現在的查詢將變爲:
$sql = "INSERT INTO {$field}s ({$field}".($field == 'tag' ? '' : ", added").") "
. "VALUES ('$value', ".($field == 'tag' ? '' : time()).") "
. "ON DUPLICATE KEY UPDATE {$field}_id = {$field}_id";
現在它開始獲得額外的亂,但我有一種感覺,人不」實際上是這樣做的。
我讀過的另一件事是功能應該只做一件事。那麼我會如何切斷這個功能?
private function _get_tag_id($value)
{
$id = $this->_add_tag_id($value);
if (empty($id))
{
$id = $this->_get_tag_id($value);
}
return $id;
}
還是會更好地保持原來的樣子?
如果你不認爲要麼。我試圖組織代碼是正確的,也覺得免費建議你去做,或者換句話說方式會是什麼組織這些簡單的最佳方式方法代碼位?
謝謝您的回答,雖然我的問題主要是問我是不是應該被重複的查詢代碼,以及我是否應該掰開我的功能,更小的功能。對於你的建議,我不認爲我會離開MySQL,所以我不認爲這會是一個問題。我會考慮使用1號。 – Joker 2011-01-12 22:37:55