package apns import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "time" ) // 连接MySQL数据库 func ConnectDB() (*sql.DB, error) { // 数据库连接信息 dsn := "wechat_mmtls:hNPpcsT2RH6pYRRk@tcp(106.53.106.115:3306)/wechat_mmtls" // 连接到数据库 db, err := sql.Open("mysql", dsn) if err != nil { return nil, err } // 测试连接是否成功 err = db.Ping() if err != nil { return nil, err } return db, nil } // 结果结构体 type APNSVip struct { ID int DeviceToken string Status int UserName string WxID string } // 结果结构体 type LicenseKey struct { ID int DeviceToken string Status int License string expiryDate string } // 查询数据 func QueryData(db *sql.DB, query string) ([]APNSVip, error) { // 查询数据 rows, err := db.Query(query) if err != nil { return nil, err } defer rows.Close() var result []APNSVip for rows.Next() { var apns APNSVip if err := rows.Scan(&apns.ID, &apns.DeviceToken, &apns.Status, &apns.UserName, &apns.WxID); err != nil { return nil, err } result = append(result, apns) } return result, nil } // 查询单条记录数据(防止 SQL 注入) func queryDataByField(db *sql.DB, fieldName string, value interface{}) (*APNSVip, error) { // 构建查询语句 query := fmt.Sprintf("SELECT * FROM apns_vip WHERE %s = ? LIMIT 1", fieldName) // 查询数据 row := db.QueryRow(query, value) var apns APNSVip err := row.Scan(&apns.ID, &apns.DeviceToken, &apns.Status, &apns.UserName, &apns.WxID) if err != nil { if err == sql.ErrNoRows { // 如果未找到记录,则返回 nil 和 nil return nil, nil } return nil, err } return &apns, nil } func IsLicenseBind(db *sql.DB, value string) (*LicenseKey, error) { // 构建查询语句 query := fmt.Sprintf("SELECT * FROM license_key WHERE license = ? and status=1 LIMIT 1") // 查询数据 row := db.QueryRow(query, value) var licenseKey LicenseKey err := row.Scan(&licenseKey.ID, &licenseKey.DeviceToken, &licenseKey.Status, &licenseKey.License, &licenseKey.expiryDate) if err != nil { if err == sql.ErrNoRows { // 如果未找到记录,则返回 nil 和 nil return nil, nil } return nil, err } return &licenseKey, nil } func UpdateLicenseBindStatus(db *sql.DB, device_token string, license string) error { // 构建更新语句 query := "UPDATE license_key SET status = 1,device_token=? WHERE license = ? and status=0" // 执行更新操作 _, err := db.Exec(query, device_token, license) if err != nil { return err } return nil } func HasLicense(db *sql.DB, value string) (*LicenseKey, error) { // 构建查询语句 query := fmt.Sprintf("SELECT license FROM license_key WHERE license = ? LIMIT 1") // 查询数据 row := db.QueryRow(query, value) var licenseKey LicenseKey err := row.Scan(&licenseKey.License) if err != nil { if err == sql.ErrNoRows { // 如果未找到记录,则返回 nil 和 nil return nil, nil } return nil, err } return &licenseKey, nil } // CheckExpiry 检查日期是否过期 func CheckExpiry(expiryDateString string) bool { // 将字符串解析为时间对象 expiryDate, err := time.Parse("2006-01-02", expiryDateString) if err != nil { fmt.Println("Error parsing expiry date:", err) return false } // 获取当前时间 currentTime := time.Now() // 比较过期日期和当前日期 if expiryDate.Before(currentTime) { return true } return false } func main777() { // 连接数据库 db, err := ConnectDB() if err != nil { fmt.Println(err.Error()) } defer db.Close() // 根据字段查询数据(防止 SQL 注入) license := "123" license_key, err := IsLicenseBind(db, license) if err != nil { fmt.Println(err.Error()) } _ = UpdateLicenseBindStatus(db, "333", "123") fmt.Println(license_key) }