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 をテストする代わりに、経験と上記の単純な使用目的に基づいて、誰かがフィードバックを提供できますか?

お手伝いありがとう。

4

2 に答える 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()です)。これはデータベースの抽象化レイヤーとして非常に強力ですが、使いたくない場合は、すべての派手な機能を使用する必要はありません。ライブラリを含めた後は、多かれ少なかれそのまま使用できます。

特にあなたの目的のために強くお勧めします。

于 2012-12-05T04:45:45.040 に答える
0

PHPの複数のデータベースバックエンド間でデータにアクセスするための移植可能な方法が必要な場合は、組み込みのPDOライブラリを使用してください。手書きのSQLの量を減らしたい場合は、Doctrineのような多くのPHPORMの1つを使用することを検討してください。

于 2012-12-05T02:59:27.797 に答える