Go 戈罗斯罐头';t创建的语句数不能超过max_prepared_stmt_count

Go 戈罗斯罐头';t创建的语句数不能超过max_prepared_stmt_count,go,Go,我将gorose用于golang的web项目,代码如下 var tablecheckrequest = "checkrequest" func (mysqldao *MysqlDao) GetAllCheckRulesByRequestId(id int) []map[string]interface{} { result, _ := mysqldao.connection.Table(tablecheckrequest). Where("requestid", "=", id

我将gorose用于golang的web项目,代码如下

var tablecheckrequest = "checkrequest"

func (mysqldao *MysqlDao) GetAllCheckRulesByRequestId(id int) []map[string]interface{} {
    result, _ := mysqldao.connection.Table(tablecheckrequest).
    Where("requestid", "=", id).Get()
    return result
}
过了一段时间,我明白了

创建的语句不能超过max\u prepared\u stmt\u count(当前值:16382)

为什么会发生这种错误?

我终于发现了! 这是gorose的源代码

func (dba *Database) Execute(args ...interface{}) (int64, error) {
//defer DB.Close()
lenArgs := len(args)
var sqlstring string
var vals []interface{}

sqlstring = args[0].(string)

if lenArgs > 1 {
    for k, v := range args {
        if k > 0 {
            vals = append(vals, v)
        }
    }
}
// 记录sqllog
//Connect.SqlLog = append(Connect.SqlLog, fmt.Sprintf(sqlstring, vals...))
dba.LastSql = fmt.Sprintf(sqlstring, vals...)
dba.SqlLogs = append(dba.SqlLogs, dba.LastSql)

var operType string = strings.ToLower(sqlstring[0:6])
if operType == "select" {
    return 0, errors.New("this method does not allow select operations, use Query")
}

if dba.trans == true {
    stmt, err := tx.Prepare(sqlstring)
    if err != nil {
        return 0, err
    }
    return dba.parseExecute(stmt, operType, vals)
}

stmt, err := DB.Prepare(sqlstring)
if err != nil {
    return 0, err
}
return dba.parseExecute(stmt, operType, vals)
}
在此方法期间,已创建stmt,但从未关闭! 为了解决这个问题,我们只需要在parseExecute()方法中添加一个defer stmt.close(),就像

func (dba *Database) parseExecute(stmt *sql.Stmt, operType string, vals []interface{}) (int64, error) {
defer stmt.Close()
var rowsAffected int64
var err error
result, errs := stmt.Exec(vals...)
if errs != nil {
    return 0, errs
}

switch operType {
case "insert":
    // get rows affected
    rowsAffected, err = result.RowsAffected()
    dba.RowsAffected = int(rowsAffected)
    // get last insert id
    rowsAffected, err = result.LastInsertId()
    dba.LastInsertId = int(rowsAffected)
case "update":
    rowsAffected, err = result.RowsAffected()
case "delete":
    rowsAffected, err = result.RowsAffected()
}

return rowsAffected, err
}

请编辑此文件以使用标记,并且语法正确。另外,您是否收到错误消息?你能更清楚地知道你想解决的具体问题是什么吗?到目前为止,您尝试了什么来解决这个问题?我怀疑这些线路上都没有发生错误。如果您告诉我们您正在使用哪个库连接到数据库,这也会很有帮助。