这是我在这里的第一篇文章,如果我能改进这个问题,请告诉我。
我正在更新一个网站。简而言之:它处理用户订阅并跟踪销售(我生产的产品)。我想在不久的将来为它添加新功能保持开放的选项。它是用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,是否有人可以根据经验和上面描述的简单预期用途提供反馈?
谢谢你的帮助。

最佳答案

对于您所描述的用途,redbeanhp是一个优秀的库。它是我使用过的最灵活的ORM。有关CRUD操作,请参见其home page上的示例:

$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()的简单调用将禁用该功能。无论如何,在投入生产之前,确保模式被冻结是非常重要的。
redbeanppp还处理数据库表之间的关系,如果您想查看在hood下执行的查询(同样,只需调用R::debug()),它具有简单的调试功能。作为一个数据库抽象层,它非常强大,但是如果您不想的话,您不必使用所有花哨的铃声和口哨。包括图书馆后,它或多或少是开箱即用的。
强烈推荐,特别是为了你的目的。

08-07 08:40
查看更多