Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dynamiczne budowanie zapytań PDO

Będziesz potrzebować oddzielnego $params parametr do Twojego select metoda. Pozwoliłem sobie na podanie wartości domyślnych dla parametrów metody. Podobnie jak notatki @userXxxx, nie potrzebujesz transakcji, aby wykonać 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);

Uwagi:

  • Jeśli naprawdę chcesz, możesz dodać dodatkowe parametry metody, aby dopasować się do całej elastyczności PDOstatement::fetchAll .
  • Nie jestem pewien, co masz na myśli mówiąc o $dbFields będące „polami plus WARTOŚCI”. Czy możesz wyjaśnić?

[Edytuj]

Możesz zajrzeć do dokumentacji/przykładów dla PDOStatement::execute , ponieważ wydawało się, że to właśnie tam tkwiło Twoje zamieszanie — w szczególności $input_parameters parametr metody.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak w MySQL zwrócić tydzień miesiąca?

  2. Stosowanie PDO na zajęciach

  3. Zamów tabelę MySQL według dwóch kolumn

  4. Wstaw wartości szesnastkowe do MySql

  5. Najłatwiejszy sposób na migrację projektu Django z MySQL do PostgreSQL