登录
首页 >  Golang >  Go问答

有没有办法查看在 sqlite 中将参数应用于查询的结果?

来源:stackoverflow

时间:2024-04-18 23:24:31 459浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《有没有办法查看在 sqlite 中将参数应用于查询的结果?》,聊聊,我们一起来看看吧!

问题内容

我在 go 中使用 sqlite3,出于调试目的,希望查看使用替换(即使用 ?)将参数应用于查询的结果。替换为实际参数。这可能吗?

目前,我有如下代码,并且打印的 fts5 查询看起来不错:

select ownerid from __ftsindex where ownertable=? and 
__ftsindex match ? and ( __ftsindex match ? ) limit ?;

它不会返回错误,但它也找不到它应该找到的内容,而且我不知道如何进一步调试它:

for i := range trails {
    if i == 0 {
        s += `( __ftsindex MATCH ?`
    } else {
        s += ` OR __ftsindex MATCH ?`
    }
}
s += " )"
query = fmt.Sprintf(`SELECT ownerid FROM __ftsindex WHERE ownertable=? AND __ftsindex MATCH ? AND %s LIMIT ?;`, s)
fmt.Println(query)
args := make([]interface{}, len(trails)+3)
args[0] = cat.Table()
args[1] = searchTerm
for i := range trails {
    args[i+2] = trails[i]
}
args[len(args)-1] = limit
rows, err := model.DB.Base().Query(query, args...)

解决方案


如果您没有从 sql 查询中获得预期的结果,则您的输入参数中可能存在恶意字节。

我建议使用 %+q 记录每个单独的参数:

for i, arg := range sqlArgs {
    if _, ok := arg.(string); ok {
        log.Printf("arg %d) %+q\n", i+1, arg) // catches any 'invisible' bytes or visually similar characters
    } else {
        log.Printf("arg %d) `%v`\n", i+1, arg)
    }
}

例如:https://play.golang.org/p/mDsnIjMAVwP

附注请参阅这篇优秀的 go blog post,了解如何渲染晦涩的字符串编码和字节切片。

今天关于《有没有办法查看在 sqlite 中将参数应用于查询的结果?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>