在我们的位置,我们将使用mysqli和PDO分为准备语句和事务支持之类的东西.有些项目使用一个,另一个项目.我们很难有可能转移到另一个RDBMS.
我更喜欢PDO,因为它允许为预准备语句提供命名参数,据我所知,mysqli没有.
在我们整合项目时只使用一种方法,是否还有其他优点和缺点选择其中一种作为标准?
迄今为止在任何开源项目下开发的最佳PHP DAL(数据抽象层)是什么,我们可以真诚地重复使用它们?
我发现很难为我的应用程序选择一个DAL,它足以支持对大多数常见数据库系统(MySQL,PostgreSQL,MSSQL,Oracle等)的抽象,并且是:
一些要考虑的图书馆:
请不要考虑:
我正在设计我的ASP.NET MVC应用程序,我遇到了一些有趣的想法.
我见过的很多样本都描述并使用了Repository模式(IRepository),所以这就是我学习MVC时的方式.
现在我知道它正在做什么,我开始看看我目前的设计并想知道它是否是最好的方式.
目前,我有一个基本的IUserRepository,它定义方法,如FindById(),SaveChanges()等.
目前,每当我想在DB中加载/查询用户表时,我都会按照以下方式执行操作:
private IUserRepository Repository;
public UserController()
: this(new UserRepository())
{ }
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit(string ReturnUrl, string FirstRun)
{
var user = Repository.FindById(User.Identity.Name);
var viewModel = Mapper.Map<User, UserEditViewModel>(user);
viewModel.FirstRun = FirstRun == "1" ? true : false;
return View("Edit", viewModel);
}
[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken(Salt = "SaltAndPepper")]
public ActionResult Edit(UserEditViewModel viewModel, string ReturnUrl)
{
//Map the ViewModel to the Model
var user = Repository.FindById(User.Identity.Name);
//Map changes to the …Run Code Online (Sandbox Code Playgroud) 刚刚遇到了Doctrine Project,它有一个Object Relational Mapper和一个DB Abstraction Layer.Doctrine提供的其他PHP抽象层不是什么?除了通过使用Doctrine查询语言编写的查询获取对象之外,还有什么实际用途可以放置ORM?查询语言真的是您想要开发整个Web应用程序吗?它表现良好吗?
总的来说,在Doctrine上构建应用程序是否更容易维护和理解?它是否过度设计,并且正在构建一个适合中小型项目的抽象层?(<50个GUI屏幕),而不是直接使用MySQL.
我经常听到人们因为缺乏灵活性和"漏洞抽象"而抨击ORM,但你真的不知道他们为什么会有问题.如果使用得当,ORM的错误究竟是什么?我问这个是因为我正在研究一个PHP orm,我希望它能解决许多其他ORM失败的问题,例如延迟加载和缺少子查询.
请具体说明您的答案.显示一些代码或描述ORM挣扎的数据库模式.语言或ORM无关紧要.
检测到Codeigniter中的数据库查询返回零结果时,我没有太多运气.我已经很好地阅读了关于PHP计数功能的说明,但我没有更明智!
我从控制器调用如下查询/视图:
$data['result'] = $this->search_model->do_search(set_value('name'));
$data['title'] = "Search results";
$this->load->view('search_view',$data);
Run Code Online (Sandbox Code Playgroud)
该视图生成一个结果表为我好,但是当我试图和陷阱空结果,计数始终返回1:
我试过if count(array($result)),只是if count($result)
那么什么是获得计数的好方法?我在我的开发笔记本电脑上使用Fedora 13和PHP 5.3.3.
我正在使用一些数据库抽象层,其中大多数都使用像"String"这样的属性,它是VARCHAR 250或INTEGER,长度为11位.但是例如我的东西长度不到250个字符.我应该去减少它吗?它真的有任何有价值的差异吗?
提前致谢!
如果我在简单的PDO上使用Doctrine的数据库抽象层(DBAL),会得到什么?
PDO本身不应该是抽象层吗?据我所知,我获得的唯一好处是能够将Oracle的oci8驱动程序与类似PDO的API一起使用。
我想念什么?
我正在设计一个Web应用程序(实际上,这是一个爱好,我正在尝试自学设计,还有什么比做它更好的方法:).无论如何,我在考虑如何处理我的数据库.我对PDO很满意,我想在我的抽象类中利用PDO.我正在考虑制作单例,因此只有一个数据库连接.这个单例将创建一个PDO连接.
在那之后,我不明白为什么我需要做太多其他事情.然后我可以使用数据库处理程序来调用PDO函数.我可能想要一些辅助函数,但是当它归结为它时,我只会将PDO用于实际的SQL查询.
这种方法有问题吗?与我使用的抽象类相比,它看起来过于简单.
php ×6
pdo ×3
database ×2
mysql ×2
orm ×2
.net ×1
abstraction ×1
architecture ×1
asp.net-mvc ×1
c++ ×1
codeigniter ×1
dbal ×1
doctrine ×1
mysqli ×1
oop ×1
sql ×1