lam*_*mas 11 php mysql design-patterns
我正在为PHP中的Web项目创建一个小框架,所以我不必为每个新网站反复做基础工作.创建第二个CakePHP或Codeigniter并不是我的目标,我也不打算用任何可用的框架构建我的网站,因为我更喜欢使用我自己创建的东西.
当涉及核心结构,请求处理等部分时,我在设计和编码框架方面没有任何问题,但我已经陷入为我的模块设计数据库接口的困难.
我已经考虑过使用MVC模式,但发现对于我这个相当小的项目来说这会有点过分.
所以我面临的确切问题是我的框架模块(viewCustomers例如可能是一个模块)应该如何与数据库交互.
将SQL直接混合到PHP代码中(仍然)是一个好主意吗?(将是"老路":) mysql_query( 'SELECT firstname, lastname(.....)?
我怎样才能抽象出如下的查询?
SELECT firstname, lastname FROM customers WHERE id=X
Run Code Online (Sandbox Code Playgroud)MySQL的"助手"功能会不会像
$this->db->customers->getBy( 'id', $x );
是个好主意?
我不太确定,因为在处理更复杂的查询时,例如上面几乎无关紧要的查询,它们往往变得毫无用处.
MVC的"模型"模式是解决这个问题的唯一真正选择吗?
您目前用什么来解决上面显示的问题?
我相信您只想从您的模块访问您的数据库.我会避免直接从代码中使用mysql_query.相反,使用抽象的数据库访问的简单模型将是简单和直接的.
例如,您可以使用以下代码获得类似models/Customers.php的文件:
<?php
class Customers {
public function getById($id) {
$sql = "SELECT first_name, last_name FROM customers WHERE id='$id'";
$res = $DB::getRow($sql);
return ($res);
}
}
Run Code Online (Sandbox Code Playgroud)
我假设某种DB帮助程序已经实例化并可用作$ DB.这是一个使用PDO的简单版本.
现在,您应该在模块中包含它并使用以下方式:
<?php
include_once "models/Customers.php";
$customers = new Customers();
$theCustomer = $customers->getById(intval($_REQUEST['cust_id']));
echo "Hello " . $theCustomer['first_name']
Run Code Online (Sandbox Code Playgroud)
干杯.
你有没有看过http://www.doctrine-project.org/或其他php orm框架(想到zend_db)?
如果您需要速度,请使用原始查询(但您实际上应该将 PDO 与准备好的查询一起使用)。
\n\n如果你想要更多的 OOP,你可以 \xe2\x80\x94as you suggest it\xe2\x80\x94 with helpers 设计这个。
\n\n有一次,我设计了类似的东西,其概念如下:
\n\n代码看起来像这样:
\n\n$select = new Select(\'field1\', \'field2\', );\n$result = $select->from(\'myTable\')\n ->addFilter(SQLFilter::RangeFilter, \'field2\')\n ->match(array(1, 3, 5))\n ->unmatch(array(15, 34))\n ->fetchAll();\nRun Code Online (Sandbox Code Playgroud)\n\n这是一个如何构建它的简单示例。
\n\n您可以更进一步,实现表关系的自动处理、字段类型检查(对表使用内省)、表和字段别名支持等。
\n\n这似乎是一项漫长而艰苦的工作,但实际上,完成所有这些功能不会花费您太多时间(\xe2\x89\x881 个月)。
\n| 归档时间: |
|
| 查看次数: |
8209 次 |
| 最近记录: |