F2E正在使用的底层数据库操作类lib/query.py的一些问题,探讨一下!

意见反馈 mywaiting 发表于 2 年前最后回复来自 qq2850071112 1 年前

见底层数据库操作类lib/query.py的代码:

        # update
        if(self.__check("data") and statement == "data:save"):
            sets = ""
            for data in self.__protected["__data"]:
                sets = sets + "%s = '%s', " % (data, self.__valuefix(self.__protected["__data"][data]))

            sets = sets.strip().rstrip(",")
            sql = sql + " SET %s" % sets

         # insert
        if(self.__check("data") and statement == "data:add"):
            sets = ""
            values = ""
            for data in self.__protected["__data"]:
                sets = sets + "%s, " % data
                values = values + "'%s', " % self.__valuefix(self.__protected["__data"][data])

            sets = sets.strip().rstrip(",")
            values = values.strip().rstrip(",")
            sql = sql + " (%s)" % sets
            sql = sql + " VALUES (%s)" % values

如上,当update或者insert的值是None的时候,照样被带入sql语句了,这样会导致数据库报错。

以update为例子,假设self.__protected["__data"][data]=None,那么就会生成语句update tablename set data = None where ...这样会让数据库报错!

修复方案:
应该先判断一下self.__protected["__data"][data]=None中的值是否为None,否则不执行下面的生成SQL的语句,insert操作处的修改也一样!

希望作者详细测试一下!

PS:已经在Github上发了issue,issue地址:https://github.com/PaulGuo/F2E.im/issues/12 如果是bug,还请修复。谢谢。

暂无回复,说出你的观点吧
登录后即可参与回复