2011-01-12 74 views
0

我有这样的代码(删除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; 
} 

还是会更好地保持原来的样子?

如果你不认为要么。我试图组织代码是正确的,也觉得免费建议你去做,或者换句话说方式会是什么组织这些简单的最佳方式方法代码位?

回答

0

我会把它颠倒 - 选择第一个,如果找不到,插入。

两个原因:

1)你会选择和发现更多的往往是选择与思念,所以选择第一平均为快。 “对重复键”

2)是一个非标准扩展可以插入能导致未来的问题,如果你曾经迁移到SQL数据库没有它。 (我认为它只是MySQL)。

至于哪个更好,我宁愿试图了解第一或第三。

+0

谢谢您的回答,虽然我的问题主要是问我是不是应该被重复的查询代码,以及我是否应该掰开我的功能,更小的功能。对于你的建议,我不认为我会离开MySQL,所以我不认为这会是一个问题。我会考虑使用1号。 – Joker 2011-01-12 22:37:55