Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie parse ich Objektdaten aus einer MySQL-Datenbank mit PHP PDO?

Das Problem mit diesen Video-Tutorials sind ihre Autoren, die keine Ahnung von dem Thema haben, was das Ergebnis VIEL VIEL SCHLECHTER macht, als wenn Sie ihre mentalen Exkremente überhaupt nicht verwenden würden. Der Schaden, den sie anrichten, ist so groß, dass ich sogar einen eigenen Artikel schreiben musste, der erklärt, warum all diese hilflosen "Wrapper" für jede Anwendung im wirklichen Leben völlig unbrauchbar sind, Die Kinderkrankheiten Ihres ersten Datenbank-Wrappers .

Nehmen Sie zum Beispiel diesen Wrapper aus dem Video:

  • Die Fehlerberichterstattung ist völlig fehlerhaft
  • Eine nutzlose Funktion für SELECTs.
  • Statefulness
  • Geschützte PDO-Instanz

Im Grunde genommen werden Sie also von diesem "Wrapper" nicht einmal so etwas Dummes wie Insert Id bekommen können. Und kein Fehlerbericht kann Ihnen helfen, das Problem auch nur zu erkennen.

Verhandeln Sie bei Ihrem Code einfach nicht damit, sich die Eingabe eines SQL-Schlüsselworts zu ersparen. Es ist dumm. SQL ist eine wertvolle Sache, entlassen Sie es nicht zugunsten einiger Kauderwelsch-Verknüpfungen. Sie sollten PDO auch nicht auf einen Zustand eines verkrüppelten Invaliden reduzieren und seine brillantesten Eigenschaften zerstören.

Ihr Wrapper sollte alle PDO- und SQL-Funktionen zugänglich machen, anstatt sie zu verwerfen. So geht es:

class DB
{
    protected static $instance;
    protected $pdo;

    protected function __construct() {
            $opt  = array(
                PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
                PDO::ATTR_EMULATE_PREPARES   => FALSE,
            );
            $dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
            $this->pdo = new PDO($dsn, DB_USER, DB_PASS, $opt);

    }

    // a classical static method to make it universally available
    public static function instance()
    {
        if (self::$instance === null)
        {
            self::$instance = new self;
        }
        return self::$instance;
    }

    // a proxy to native PDO methods
    public function __call($method, $args)
    {
        return call_user_func_array(array($this->pdo, $method), $args);
    }

    // a helper function to run prepared statements smoothly
    public function run($sql, $args = [])
    {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($args);
        return $stmt;
    }
}

dieser Wrapper ist zehnmal einfacher und gleichzeitig zehnmal leistungsfähiger als der aus dem Video.

Und jetzt Ihre Klasse

class Schedule
{
    private $_db;

    public function __construct()
    {
        $this->_db = DB::instance();
    }

    public function listGames()
    {
        $data = $this->_db->query('SELECT * FROM games')->fetchAll();
        var_dump($data);
        echo '<br>';
    }
}

Das Geheimnis dabei ist, dass PDO Ihnen bereits Objektdaten ohne eine einzige zusätzliche Codierungszeile liefern kann.

Obwohl dieses einfache Beispiel nicht sehr beeindruckend ist, ist das Geheimnis hier, dass dieser Wrapper Ihnen auch für jedes andere Beispiel dienen wird, wenn das aus dem Video erstickt. Versuchen Sie, sich ein anderes Beispiel auszudenken, und ich werde Ihnen zeigen, wie einfach und doch leistungsfähig dieser Wrapper ist.