我有一个名为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。我主要担心的是功能性和性能,代码可读性现在不是问题!
答案 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语句”库中的函数来添加混淆。