使用tclodbc将变量的值插入数据库

时间:2012-02-17 06:14:46

标签: tcl

将tclodbc与包含revnum的{​​{1}}变量一起使用, 以下语句出现错误“77777

ERROR:  invalid input syntax for integer: "$revnum"

但这句话有效:

$db {insert into (revnum,risetime,settime,sat,passlen,riseges,setges,elevation)
    values('$revnum','1111-11-1111:11:11:11','1111-11-1111:11:11','C4','24','QQ','QQ','22');}    

为什么变量$db {insert into (revnum,risetime,settime,sat,passlen,riseges,setges,elevation) values('77777','1111-11-11 :11','1111-11-1111:11:11','C4','24','QQ','QQ','22');} 的值不会插入数据库?

1 个答案:

答案 0 :(得分:3)

mu太短给出了正确答案:解决方法是在尝试向数据库插入内容之前,先了解Tcl中grouping字符works的内容。

请注意,您的代码本质上存在缺陷,因为您不使用参数化查询,这是每个合理的程序员在以编程方式查询数据库时应该使用的。阅读tclodbc手册中有关数据库对象的statement子命令的内容。基本上你应该这样做:

$db statement ins {insert into (revnum, risetime, settime, sat,
                                passlen, riseges, setges, elevation)
                   values (?, ?, ?, ?, ?, ?, ?, ?)}
$ins $revnum 1111-11-1111:11:11:11 C4 24 QQ QQ 22

这样,无论值来自何处以及它们包含什么,ODBC后端驱动程序都会正确地转义所有阻止SQL injection的值。