Hola
Creo que necesitas trabajar más aún con tu modelo de manejo de datos con SQL, ya que estas manejando tu SQL "A mano" en mi parecer necesitas un objeto "intermedio" o adaptador que se ocupe te acomodar las consultas y convertirlas al MODELO de base de datos adecuado..
El método query debería de ser un método "wrapper" del método query de PDO para que puedas aplicar reglas especificas del motor que estas usando antes de enviar la query al motor de base de datos.
Código PHP:
interface Adapter{
public function query($consulta,$params,$limit);
}
class MySql implements Adapter{
public function query($consulta,$params,$limit){
//Aqui creas tu cadena SQL conforme lo hace Mysql con los paremetros enviados.
return $consulta.$params.$limit;
}
}
class PostGres implements Adapter{
public function query($consulta,$params,$limit){
//Aqui creas tu cadena SQL conforme lo hace Postgres con los paremetros enviados.
return $consulta.$params.$limit.' OFFSET ';
}
}
class Db{
private $_adapter;
private $_db;
public function setAdapter(Adapter $adapter){
$this->_adapter = $adapter;
}
public function query($consulta,$params,$limits){
$this->_db->query($this->_adapter('SELECT','campos',array(0,4)));
}
}
Algo así el chiste es que tengas un "wrapper" antes de dejar caer los datos sobre PDO
Ahora si cumplirias tu objetivo de SOLO cambiar la base de datos en el setAdapter ;)
Por que MySQL, Postgress o ORACLE estarian cumpliendo con el CONTRATO de implementación de la interface.
Código PHP:
$db->setAdapter(new Mysql());
$db->setAdapter(new Postgress());
Cabe mencionar que los frameworks actuales tienen ya super bien definidos sus adaptadores para que no te manejes el SQL a mano