我是一名中级开发人员,直到今天,我有一个使用几年前编写的已弃用 mysql* 函数的数据库类。我想升级它,但在我选择一些东西之前,我想了解一下stackoverflow。
我之前有两个选择。MySQLi 和 PDO。最近,一位资深开发人员告诉我彻底删除我的数据库类,学习 Doctrine DBAL 并使用它。
我不太了解 Doctrine DBAL。对于我的迷你框架来说,这会不会有些过头了?
我应该选择和使用什么,为什么?
PDO 完全没问题。教义臃肿而缓慢。除了可怕的经历外,我什么都没有,并且找不到任何充分的理由在 PDO 上使用它。DBAL != ORM。DBAL 是数据库抽象层。PDO 是数据访问层。无论如何,PDO 是一个很棒的工具。
谢谢你的好问题。
首先,关于 MySQLi 与 PDO 的问题。
如果您正在为自己的班级寻找新的基地
如果您正在寻找全新的类,PDO 又是唯一的选择,因为它具有一些抽象功能,使其使用起来更容易,并且生成的代码大大缩短。最近我为 PDO 标签写了一个 wiki,解释了它的一些特性(以及缺陷)——你可能会发现它很有用。
但是,它缺少许多重要功能。所以,手工制作的助手类仍然是最好的选择。
如果您还没有实现占位符,我建议您使用现成的课程,因为占位符必须是此类课程的主要原因。
我让SafeMysql牢记 3 个目标:安全、DRY 代码和易用性。
我希望你喜欢类型提示占位符的想法。
至于学说——我个人不喜欢这种抽象程度。我更喜欢尽可能接近 SQL。只有几个安全助手和更少的代码。
关于所有这些性能的东西的注释。
我从未见过 DBAL 会成为瓶颈的应用程序。因此,任何(想象的)性能问题都必须是您最不关心的问题。
使用实际数据在实时环境中进行的真实分析是唯一可靠的证明。
世界上绝对没有理由不使用 MySqli 或 PDO——无论你觉得哪个最舒服。
恕我直言...
PS:我也从未听说过“Doctrine DBAL”:)
PPS:另一个抽象层通常意味着更臃肿、性能下降和灵活性降低。更不用说学习曲线了。坚持使用 PDO 或 MySqli 的所有很好的理由。
如果这仅适用于 MySQL,请使用 mysqli,因为它比 PDO 稍微快一些(稍微意味着最多 10%)。如果您想使用 Doctrine DBAL 的额外功能,例如事务或类型转换,您可以尝试一下。如果不是,请继续使用 PDO,因为它比 Doctrine DBAL 快得多(最多 10 倍)并且使用更少的内存。