再来看看DAU_insert是干啥的:
经过环境检查后,调用:
int bind_ins(register DAU *DP,char *buf)
{
int ret=0;
register char *p;
p=buf;
if(DP->ins_sth==SQLO_STH_INIT) {//游标未打开,只要不执行DAU_free,游标就不会被关闭。
生成语句,干一大堆活;
}
//bind
DP->srm.hint=0;
DP->tail=p;
BB_Tree_Scan(DP->bt_ins,bind_proc);//绑定变量,泛型,遍历二叉树,第二个参数是回调函数。
//exec
DP->SQL_Connect->Errno = 0;
if(0!=(ret = sqlo_execute(DP->ins_sth, 1))) { //执行插入
错误处理;
}
//收集RETURNING变量值
BB_Tree_Scan(DP->bt_ins,bind_returning);
return ret;
}
【 在 ylh1969 的大作中提到: 】
: 绑定变量的意思是,语句是语句,变量是变量,在语句里只有占位符,没有数据。就是说,任何数据不会成为语句,这就彻底杜绝了sql注入。
: 一般人写数据库程序,懒得用绑定,都是把值写在sql语句里,这就会造成SQL注入。这样的sql不仅不安全而且效率低。
: 在数据库引擎里,有个语句解析器,把一个sql语句的文本解析成执行计划。如果遇到相同语句,就会避免解析,直接引用执行计划,叫做软解析,这可以提高执行效率。直接写值,造成每个sql都不同,无法进行软解析。
: ...................
--
修改:ylh1969 FROM 221.221.52.*
FROM 221.221.52.*