PHP和MySQL的简单数据库抽象化

3
这是我在这里的第一篇文章,请告诉我如何改进问题。
我正在更新一个网站。简而言之:它处理用户订阅并跟踪销售(我制作的产品)。我希望保持开放式选项,以便在不久的将来添加新功能。它使用PHP和MySQL构建。
我已经有5年没有认真更新过代码了,并且我正在抓住机会使整个代码更易于管理和更新。特别是,我试图使与数据库交互更加友好。
我已经尝试使用ezSQL,它让我以非常简洁的方式与数据库交互,例如:
$users = $db->get_results("SELECT name, email FROM users");
foreach ( $users as $user ) {
    // Access data using object syntax
    echo $user->name;
    echo $user->email;
}

我很喜欢它:我可以快速得到一个可用的对象,使代码更易读,而不需要使用那么多mysql_*函数,也不会像以前那样到处都是SQL查询语句。
如果对于SELECT查询来说很好用,但对于INSERT语句并没有太大帮助,我可能最终会得到像这样的代码:
$db->query( "INSERT INTO    users    (name, email, date, hostname, cid, code, email_id, email_date, source, ebook, audiobook )
                            VALUES    ( '" . $db->escape( $user->name ) . "',
                                        '" . $db->escape( $user->email ) . "',
                                        '" . $db->escape( $user->date ) . "',
                                        '" . $db->escape( $user->hostname ) . "',
                                        '" . $db->escape( $user->cid ) . "',
                                        '" . $db->escape( $user->code ) . "',
                                        '" . $db->escape( $user->email_id ) . "',
                                        '" . $db->escape( $user->email_date ) . "',
                                        '" . $db->escape( $user->source ) . "',
                                        '" . $db->escape( $user->ebook ) . "',
                                        '" . $db->escape( $user->audiobook ) . "')"
                            );

这可能不是很好,但仍然不太容易处理。对我来说最糟糕的部分是它根本不像前一个示例那样直截了当。
因此,考虑到以下表结构和PHP对象:
$user = new User();
$user->name = 'something';
$user->email = 'something@example.com';
/// etc.

class User {
    var $name;
    var $email;
    // etc.
}

我希望有一个简单的库,让我可以做到这一点:

$user->insert();

...并且将类的每个成员与数据库中同名的列匹配,并相应地插入数据。
我的问题是:是否有这样的库?如果没有,为什么不好。
我一直在阅读MVC,但我认为这对于这个项目来说太过复杂了。它会增加多余的复杂性而不是简单性。例如,我不需要脚手架或任何生成默认代码的东西。此外,我不想陷入一个对于这个简单项目来说太过庞大的框架。
因此,我对PHP的数据库抽象层(例如:ADODb、PDO)很感兴趣,但目前还不清楚它们主要是用来缩短编写代码的时间(我的预期使用),还是使编写代码更容易适用于各种数据库。我不介意我的代码只能在MySQL上运行。我只是想为了清晰度而进行抽象处理,而不是为了兼容性。
除了必须测试每个PHP DAL之外,是否可以根据经验和上述简单预期使用提供反馈?
谢谢您的帮助。
2个回答

3

RedBeanPHP是一个非常出色的库,适用于你所描述的目的。它是我曾经使用过的最灵活的ORM。查看他们主页上CRUD操作的示例:

主页
$post = R::dispense('post');
$post->text = 'Hello World';

$id = R::store($post);      //Create or Update
$post = R::load('post',$id); //Retrieve
R::trash($post);            //Delete

这个库非常灵活,它可以动态生成数据库表,因此您不必在模式上费太多心思。许多人认为这是一个特性 - 我通常会关闭它,因为我更喜欢手动调整我的表格。尽管如此,简单调用R::freeze()将禁用该功能。无论如何,在进入生产之前,确保模式已被冻结是至关重要的。
RedBeanPHP还处理数据库表之间的关系,并且如果您想查看底层执行的查询,它具有简单的调试功能(再次调用R::debug())。它作为数据库抽象层非常强大,但如果您不想使用所有花哨的功能,则不必使用。包含库后,它基本上可以立即使用。
强烈推荐,特别是对于您的目的。

0
如果您想在 PHP 中以便携方式访问多个数据库后端中的数据,请使用内置的 PDO 库。如果您想减少手写 SQL 的数量,可以考虑使用诸如 Doctrine 等许多 PHP ORM 之一。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接