sql >> Database teknologi >  >> RDS >> Mysql

BOB Dynamic Query Building

Du skal bruge en separat $params parameter til din select metode. Jeg tog mig den frihed at angive standardindstillinger for metodeparametrene. Ligesom @userXxxx noter, behøver du ikke en transaktion bare for at udføre en 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);

Bemærkninger:

  • Hvis du virkelig vil, kan du tilføje yderligere metodeparametre for at matche al fleksibiliteten i PDOStatement::fetchAll .
  • Jeg er ikke sikker på, hvad du mener om $dbFields være "felter plus VÆRDIER". Kan du forklare?

[Rediger]

Du vil måske tage et kig på dokumenterne/eksemplerne for PDOStatement::execute , da det så ud til at være der, din forvirring var forankret - især $input_parameters metodeparameter.



  1. SQL Vælg kun rækker, hvor der findes nøjagtige flere relationer

  2. SQL Server, den vildledende XLOCK &optimeringer

  3. Sådan indsætter du tags i databasen ved hjælp af jquery html og php

  4. Gruppering efter kolonne med afhængighed af en anden kolonne