This is somewhat confusing. It looks like you basically have two different ways to pass in similar parameters, one which would bind it specifying a type, one without?

A better way to do this might be:
`public function query($query, $return_type = DBConnection::NOTHING, $params = null, $data_types = null)`

Both $params and $data_types would be passed in as arrays., and if $data_types for a particular key is not specified, just assume type "string" like PDO does.

Example:
`query("SELECT * FROM foo WHERE bar = :bar LIMIT :limit",
      DBConnection::ROW_COUNT,
      array(':bar' => 'baz', ':limit' => 24),
      array(':limit', DBConnection::PARAM_INT);`