将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');}
的值不会插入数据库?
答案 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的值。