如果我将所有数据库查询放在一个文件中,这没关系吗?

时间:2010-10-11 12:46:16

标签: php mysql function

我有一个名为models.php的函数文件,它存储了我的所有数据库函数,例如

// get the updates for the $user_id profile
function getProfileUpdates($user_id) {

    $query="SELECT m . * , u.picture, u.username
            FROM notes m, user u
            WHERE m.user_id = u.user_id
            AND u.user_id ='$user_id'
            ORDER BY m.dt DESC
            LIMIT 10";
    $result = mysql_query($query);
    return $result;



}
function getTopicId($topic){


              $query="SELECT id
                     FROM topic
                     WHERE topic ='$topic'
                      ";

              $result = mysql_query($query);

              $row = mysql_fetch_array($result);

              return $row['id'];
          }

将所有我的mysql查询都放在一个文件中是可以的,所以我可以在开发我的Web应用程序时随时使用它们,这是一个好的做法,还是更好的选择。

P.S。我主要担心的是功能性和性能,代码可读性现在不是问题!

3 个答案:

答案 0 :(得分:1)

是的,将所有数据库接口代码分开。这是推荐的做法。它有助于重用,可读性以及将应用程序逻辑与处理存储后端分离。此外,这样做通常没有性能损失。

理论上的优势是,如果抽象出所有功能,您可以转换到不同的数据库方法。在实践中,很难从SQL后端转换,但至少你的API会允许它。

两个值得关注的注意事项:您永远不能移出所有数据库查询。通常存在性能或参数约束,保留在应用程序代码中混合的SQL查询是有意义的。但试着尽可能多地移出你认为合情合理的东西。

第二:尝试淘汰mysql_query。使用PDO不仅更简单,而且更安全(也可以为PHP4模拟)。例如,您的第一个函数可以简化为:

function getProfileUpdates($user_id) {
    global $db;
    $s = $db->prepare("SELECT m . * , u.picture, u.username
        FROM notes m, user u
        WHERE m.user_id = u.user_id
        AND u.user_id = ?
        ORDER BY m.dt DESC LIMIT 10");
    $s->execute($user_id)
    return $s->fetch();
}

$user_id添加为参数,并将SQL替换为?占位符。

答案 1 :(得分:0)

我更喜欢面向对象的编程,例如: $user->getProfileUpdates(),但似乎是一种令人愉快的代码重用解决方案。

请注意您必须开始指定大型选项数组的部分。如果您最终决定可能需要不同的顺序或限制配置文件更新,具体取决于上下文,该怎么办?期待扩展你拥有的东西。

答案 2 :(得分:0)

“所有”这个词让我担心。是否可以在整个应用程序中调用getProfileUpdates之类的函数来获取所有配置文件更新的列表?的绝对!

您是否想要一个绝对规则,即100%的所有SQL语句必须始终作为该文件中的函数写入? 绝对不是!

虽然某些查询(如获取主题的ID)是常见且可重用的,并且可能在应用程序的许多不同位置需要,但其他查询将专门用于特定脚本执行的任务。不要通过故意将它们重新定位到“所有SQL语句”库中的函数来添加混淆。