sql >> Databáze >  >> RDS >> Mysql

Dynamické vytváření dotazů PDO

Budete potřebovat samostatný $params parametr k vašemu select metoda. Dovolil jsem si poskytnout výchozí hodnoty pro parametry metody. Stejně jako poznámky @userXxxx nepotřebujete transakci, jen abyste provedli SELECT .

<?php

class db {

    public $connection; //PDO
    public $dbFields; // This is an array of the fields plus VALUES

    public function select($where = '1', $params = array(), $limit = '', $fetchStyle = PDO::FETCH_ASSOC) { //fetchArgs, etc
        $fields = implode(', ', $this->dbFields);

        //create query
        $query = "SELECT $fields FROM {$this->table} WHERE $where $limit";

        //prepare statement
        $stmt = $this->connection->query($query);

        $stmt->execute($params);

        return $stmt->fetchAll($fetchStyle);
    }

    //...
}


$where = 'userId IN(:userId1, :userId2)';
$params = array(':userId1' => 111, ':userId2' => 2222);
$db->select($where, $params);

Poznámky:

  • Pokud opravdu chcete, můžete přidat další parametry metody, aby odpovídaly veškeré flexibilitě PDOStament::fetchAll .
  • Nejsem si jistý, co máte na mysli o $dbFields jsou "pole plus HODNOTY". Můžete vysvětlit?

[Upravit]

Možná se budete chtít podívat na dokumenty/příklady pro PDOStatement::execute , protože se zdálo, že to byl důvod vašeho zmatku – konkrétně $input_parameters parametr metody.



  1. Oprava varování MySQL 1287:„BINARY expr“ je zastaralé a bude odstraněno v budoucí verzi

  2. Výběr neexistujících dat pomocí MySQL

  3. Získejte první pondělí v měsíci v SQLite

  4. Omezení klauzule IN na serveru SQL Server