diff --git a/query.go b/query.go
index 6d763a6..0c50659 100644
--- a/query.go
+++ b/query.go
@@ -50,6 +50,10 @@ func (q *Query) bindInto(into *int, args ...any) *Query {
 		}
 		v := reflect.ValueOf(arg)
 		if v.Kind() == reflect.Ptr {
+			if v.IsNil() {
+				q.stmt.BindNull(*into)
+				continue
+			}
 			arg = v.Elem().Interface()
 		}
 		if asString, ok := arg.(string); ok {
diff --git a/query_test.go b/query_test.go
index 71cd9b8..24fbd6f 100644
--- a/query_test.go
+++ b/query_test.go
@@ -122,6 +122,26 @@ func TestUpdateQueryWithPointerValue(t *testing.T) {
 	require.Equal(t, "ipsum", value)
 }
 
+func TestUpdateQueryWithSetPointerValue(t *testing.T) {
+	type S struct {
+		value *string
+	}
+	db := openTestDb(t)
+	func() {
+		tx := db.MustBegin()
+		defer tx.MustRollback()
+		tx.Query("insert into mytable(key, value) values ('lorem', 'bar')").MustExec()
+		s := S{nil}
+		key := "lorem"
+		tx.Query("update mytable set value = ? where key = ?").Bind(s.value, key).MustExec()
+		tx.MustCommit()
+	}()
+
+	var value *string
+	db.Query("select value from mytable where key = 'lorem'").MustScanSingle(&value)
+	require.Equal(t, (*string)(nil), value)
+}
+
 func TestUpdateQueryWithNullValue(t *testing.T) {
 	db := openTestDb(t)
 	func() {