 				}
 			}
 			index += 1
+		}
+	}
+
+	/// 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<S: Sequence, T: ParameterBindable>(parameters: S) throws where S.Iterator.Element == (String, T) {
+		for (name, value) in parameters {
+			let index = sqlite3_bind_parameter_index(stmt, name)
+			guard index > 0 else {
+				throw DatabaseError("Unknown parameter \"\(name)\"")
+			}
+			try value.bind(to: stmt, parameter: index)
 		}
 	}
 

	/// - parameter values: A sequence of values to bind to SQL parameters
	///
	/// - throws: An error if one of `values` couldn't be bound
	public func bind<S: Sequence, T: ParameterBindable>(parameters values: S) throws where S.Iterator.Element == T? {
		var index: Int32 = 1
		for value in values {

				throw DatabaseError(message: "Error binding null to parameter \(idx)", takingDescriptionFromStatement: stmt)
			}
		}
	}

	/// Binds `value` to the SQL parameter `name`.
	///
	/// - parameter value: The desired value of the SQL parameter
	/// - parameter name: The name of the SQL parameter to bind
	///
	/// - throws: An error if the SQL parameter `name` doesn't exist or `value` couldn't be bound
	public func bind<T: ParameterBindable>(value: T, toParameter name: String) throws {
		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 the SQL parameter `name`.
