| | |
| | | $dsn_string = $this->dsn_string($dsn); |
| | | $dsn_options = $this->dsn_options($dsn); |
| | | |
| | | if ($db_pconn) { |
| | | if ($this->db_pconn) { |
| | | $dsn_options[PDO::ATTR_PERSISTENT] = true; |
| | | } |
| | | |
| | |
| | | $this->db_error_msg = null; |
| | | |
| | | // send query |
| | | $query = $this->dbh->query($query); |
| | | $result = $this->dbh->query($query); |
| | | |
| | | if ($query === false) { |
| | | if ($result === false) { |
| | | $error = $this->dbh->errorInfo(); |
| | | $this->db_error = true; |
| | | $this->db_error_msg = sprintf('[%s] %s', $error[1], $error[2]); |
| | | |
| | | rcube::raise_error(array('code' => 500, 'type' => 'db', |
| | | 'line' => __LINE__, 'file' => __FILE__, |
| | | 'message' => $this->db_error_msg), true, false); |
| | | 'message' => $this->db_error_msg . " (SQL Query: $query)" |
| | | ), true, false); |
| | | } |
| | | |
| | | $this->last_result = $query; |
| | | $this->last_result = $result; |
| | | |
| | | return $query; |
| | | return $result; |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | if ($result || ($result === null && ($result = $this->last_result))) { |
| | | // repeat query with SELECT COUNT(*) ... |
| | | if (preg_match('/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i', $result->queryString, $m)) { |
| | | if (preg_match('/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/ims', $result->queryString, $m)) { |
| | | $query = $this->dbh->query('SELECT COUNT(*) FROM ' . $m[1], PDO::FETCH_NUM); |
| | | return $query ? intval($query->fetchColumn(0)) : false; |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * Escapes a string so it can be safely used in a query |
| | | * |
| | | * @param string $str A string to escape |
| | | * |
| | | * @return string Escaped string for use in a query |
| | | */ |
| | | public function escape($str) |
| | | { |
| | | if (is_null($str)) { |
| | | return 'NULL'; |
| | | } |
| | | |
| | | return substr($this->quote($str), 1, -1); |
| | | } |
| | | |
| | | /** |
| | | * Quotes a string so it can be safely used as a table or column name |
| | | * |
| | | * @param string $str Value to quote |
| | |
| | | public function quoteIdentifier($str) |
| | | { |
| | | return $this->quote_identifier($str); |
| | | } |
| | | |
| | | /** |
| | | * Escapes a string so it can be safely used in a query |
| | | * |
| | | * @param string $str A string to escape |
| | | * |
| | | * @return string Escaped string for use in a query |
| | | * @deprecated Replaced by rcube_db::escape |
| | | * @see rcube_db::escape |
| | | */ |
| | | public function escapeSimple($str) |
| | | { |
| | | return $this->escape($str); |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | $rcube = rcube::get_instance(); |
| | | |
| | | // return table name if configured |
| | | $config_key = 'db_table_'.$table; |
| | | |
| | | if ($name = $rcube->config->get($config_key)) { |
| | | return $name; |
| | | // add prefix to the table name if configured |
| | | if ($prefix = $rcube->config->get('db_prefix')) { |
| | | return $prefix . $table; |
| | | } |
| | | |
| | | return $table; |