 	/// - parameter parameters: A sequence of name and value pairs to bind to SQL parameters
 	///
 	/// - throws: An error if the SQL parameter *name* doesn't exist or *value* couldn't be bound
-	public func bind<T: ParameterBindable>(parameters: [String: T]) throws  {
+	public func bind(parameters: [String: ParameterBindable?]) throws  {
 		for (name, value) in parameters {
 			let idx = sqlite3_bind_parameter_index(stmt, name)
 			guard idx > 0 else {
 				throw DatabaseError("Unknown parameter \"\(name)\"")
 			}
-			try value.bind(to: stmt, parameter: idx)
-		}
-	}
-
-	/// Binds *value* to SQL parameter *name* for each (*name*, *value*) in `parameters`.
-	///
-	/// - parameter parameters: A sequence of name and value pairs to bind to SQL parameters
-	///
-	/// - throws: An error if the SQL parameter *name* doesn't exist or *value* couldn't be bound
-	public func bind<T: ParameterBindable>(parameters: [String: T?]) throws  {
-		for (name, value) in parameters {
-			let idx = sqlite3_bind_parameter_index(stmt, name)
-			guard idx > 0 else {
-				throw DatabaseError("Unknown parameter \"\(name)\"")
-			}
 			if let value = value {
 				try value.bind(to: stmt, parameter: idx)
 			}

	/// - parameter sql: The SQL statement to execute
	/// - parameter parameters: A sequence of name and value pairs to bind to SQL parameters
	/// - parameter block: A closure called for each result row
	///
	/// - throws: Any error thrown in `block` or an error if `sql` couldn't be compiled, `parameters` couldn't be bound, or the statement couldn't be executed
	public func execute<S: Sequence, T: ParameterBindable>(sql: String, parameters: S, _ block: ((_ row: Row) throws -> ())? = nil) throws where S.Iterator.Element == (String, T) {
		let statement = try prepare(sql: sql)
		try statement.bind(parameters: parameters)
		try statement.execute(block)
	}

	/// Executes `stmt` with *value* bound to SQL parameter *name* for each (*name*, *value*) in `parameters` and applies `block` to each result row.
	///
	/// - parameter sql: The SQL statement to execute
	/// - parameter parameters: A sequence of name and value pairs to bind to SQL parameters
	/// - parameter block: A closure called for each result row
	///
	/// - throws: Any error thrown in `block` or an error if `sql` couldn't be compiled, `parameters` couldn't be bound, or the statement couldn't be executed
	public func execute<S: Sequence, T: ParameterBindable>(sql: String, parameters: S, _ block: ((_ row: Row) throws -> ())? = nil) throws where S.Iterator.Element == (String, T?) {
		let statement = try prepare(sql: sql)
		try statement.bind(parameters: parameters)
		try statement.execute(block)
	}
}


			}
		}
	}
}

extension Statement {
	/// Binds the *n* parameters in `values` to the first *n* SQL parameters of `self`.
	///
	/// - parameter values: A series of values to bind to SQL parameters
	///
	/// - throws: An error if one of `values` couldn't be bound
	public func bind(parameterValues values: ParameterBindable?...) throws  {
		try bind(parameterValues: values)
	}

	/// Binds *value* to SQL parameter *name* for each (*name*, *value*) in `parameters`.
