public function execute($statement, $params = array())
    {
        $preparedStmt = null;
        $result = false;

        try {
            $preparedStmt = $this->getConnection()->prepare($statement);
        } catch (PDOException $e) {
            throw new ClientException(
                'Failed to prepare MySQL statement.',
                null,
                $e
            );
        }

        foreach ($params as $name => $paramInfo) {
            if (is_string($paramInfo)) {
                $preparedStmt->bindValue($name, $paramInfo, PDO::PARAM_STR);
            } elseif (is_array($paramInfo)) {
                list($value, $type) = $paramInfo;
                $preparedStmt->bindValue($name, $value, $type);
            }
        }

        try {
            $result = $preparedStmt->execute();
        } catch (PDOException $e) {
            throw new ClientException(
                'Failed to execute MySQL statement.',
                null,
                $e
            );
        }

        return $result;
    }