/** * Execute the query * * @param string $query * @param array $bindings OPTIONAL, but very recommended * @param integer $fetchMode pass only PDO::FETCH_* constants * @return boolean|int False if query failes; number of affected rows if query passed * * @link http://koldy.net/docs/database/basics#query * @link http://www.php.net/manual/en/pdo.constants.php */ public function query($query, array $bindings = null, $fetchMode = null) { $sql = is_object($query) ? $query->__toString() : trim($query); $this->lastQuery = $sql; $this->lastBindings = $bindings; $adapter = $this->getAdapter(); try { $stmt = $adapter->prepare($sql); } catch (PDOException $e) { // the SQL syntax might fail here $this->lastException = $e; $this->lastError = $e->getMessage(); throw $e; } $stmt->setFetchMode($fetchMode !== null ? $fetchMode : PDO::FETCH_OBJ); $logSql = false; try { if ($bindings === null) { $ok = $stmt->execute(); } else { $ok = $stmt->execute($bindings); } $logSql = true; } catch (PDOException $e) { $this->lastException = $e; $this->lastError = $e->getMessage(); throw $e; } $return = null; if ($ok) { if (strtoupper(substr($sql, 0, 6)) == 'SELECT') { $return = $stmt->fetchAll(); } else { $return = (int) $stmt->rowCount(); } } else { $return = false; } if (LOG && $logSql) { if ($this->configKey === null) { Log::sql($this->__toString()); } else { Log::sql("{$this->configKey}>>{$this->__toString()}"); } } return $return; }