1

特定のプロパティを持つクラスがあり、それらのプロパティがデータベースの列名と一致するように最善を尽くしたとしましょう。これにより、データベースの各行をクラスオブジェクトに収めることができます。

私が通常これを行う方法は$class->get_all()、特定のクエリに一致するすべての行についてデータベースにクエリを実行するメソッドを作成することです。次に、リソースセットから、mysql_fetch_object($ resource)を使用していくつかのSQLオブジェクトを作成し、それらを1つの配列に格納して返します。基本的に、このようなことが通常発生します。

<?php 
    while($row = mysql_fetch_object($result_set)){
        $class->id = $row->id;
        $class->name = $row->name;
        $class->birthdate = $row->birthdate;

        $output[] = $class;
    }

    return $output;
?>

...これは、同じプロパティを持つ2つのオブジェクト($rowと$class)があり、そのうちの1つをもう1つにコピーしていることを意味します。

これを最適化する方法はありますか?同様に、値を一方から他方にコピーする代わりに、同じsqlオブジェクトプロパティへのポインタとして設定しますか?

4

1 に答える 1

2

PDO の場合:

<?php

    $pdo = new PDO("mysql:host=localhost;dbname=database_name", "user", "pass");
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, PDO::ERRMODE_EXCEPTION);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $stmt = $pdo->query("SELECT `id`, `username`, `password` FROM `whatever`");

    while ($class = $stmt->fetchObject("YourClassNameHere")) {
        /*
        * $class now holds an object of type YourClassNameHere
        * With all properties set properly.
        */
    }

注:これは単純化された例です。本番コードでは、ユーザー入力を考慮する必要がある場合があります。その場合は、準備済みステートメントを使用します。結果を取得する方法は変わりません。

于 2012-07-29T18:54:25.433 に答える