到底怎样才是最正确的?

miniburger 2005-02-17 11:26:34
在ASP里怎样写SQL语句是最正确的?

注:字段id 为数值型
变量searchId 为字符串型


写法一:
sql="select * from tb_view where id="&searchId
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1

写法二:
sql="select * from tb_view where id="&cint(searchId)&""
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1

我认为写法一是最正确的,大家认为呢?
...全文
157 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
miniburger 2005-02-23
  • 打赏
  • 举报
回复
或者我这样问吧,大家更支持用哪一种写法?

改成这样是不是更标准一些?

sql="select * from tb_view where id=" & cint(searchId)
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
miniburger 2005-02-23
  • 打赏
  • 举报
回复
TO raline:

“错的时候,比如searchId="aa" 的时候,用涵数的错误信息是涵数转化错误
不用涵数的错误是数据库对比错误
你可能感觉没什么,但是细看你会发现,它会把表项名“ID”写在错误信息里
很多黑客就是利用作者的这种漏洞攻击数据库的”

说得有道理!

具体怎么看这个错误信息啊??

raline 2005-02-21
  • 打赏
  • 举报
回复
刚看到有个朋友在涵数外加了单引号好像不对哦
字符串才要单引号,如果是数字引起来又变成字符了
不是更错了
raline 2005-02-21
  • 打赏
  • 举报
回复
sql="select * from tb_view where id="&cint(searchId)&""

最后的)&""多余
cint(searchId)是把字符型转为数字型
其实直接searchId也可以,系统会转化之后比较
但是应该加上涵数
对的时候大家都对,不用说了
错的时候,比如searchId="aa" 的时候,用涵数的错误信息是涵数转化错误
不用涵数的错误是数据库对比错误
你可能感觉没什么,但是细看你会发现,它会把表项名“ID”写在错误信息里
很多黑客就是利用作者的这种漏洞攻击数据库的
超级大笨狼 2005-02-21
  • 打赏
  • 举报
回复
& 两边最好加上空格。
因为是运算符号。
Hozaka 2005-02-21
  • 打赏
  • 举报
回复
VBScript 本身就是弱类型的,所以两种都是正确的。

但是合理使用 CINT 函数,可以避免 SQL 注入
wfwclyms 2005-02-20
  • 打赏
  • 举报
回复
你明白什么是变量,什么是变量的值吗?
valu 2005-02-20
  • 打赏
  • 举报
回复
sql="select * from tb_view where id='"&cint(searchId)&"'"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1

这样才防sql注入
miniburger 2005-02-20
  • 打赏
  • 举报
回复
我只是不是明白,为什么在第二种写法当中,字符串可以志整型数相加!

sql="select * from tb_view where id="&cint(searchId)&""

a="select * from tb_view where id="
b=cint(searchId)
c=""

然后a+b+c=sql

a、c、sql是字符串型
而 b很明显是整型
相加无问题的?
jobskynet 2005-02-18
  • 打赏
  • 举报
回复
其实都正确,自动编号在ACESS和SQL中两种方式没有差异;在SQL处理的时候是一样的,不过使用Cint
是可以防止注入的,使用' or 1=1 or exist 等语句后将报错
madpolice 2005-02-18
  • 打赏
  • 举报
回复
"正确"的含义是什么?

cscsf 2005-02-18
  • 打赏
  • 举报
回复
vbscript基本淡化了数据类型的问题

你看申明的时候也是dim a
不过有时候也会数字和字符比较后说不正确
aa="2"
if aa=2 then


用cstr转换
miniburger 2005-02-18
  • 打赏
  • 举报
回复
但在这里,SQL不也是一个字符串变量吗??
字符串与字符串相加也错?
不是字符串与数值型相加才是错的吗?
至于防注入,在取searchId这个变量时我已经处理过的了。
life360 2005-02-17
  • 打赏
  • 举报
回复
一样
zzs_2013 2005-02-17
  • 打赏
  • 举报
回复
对第二种可以防止SQL注入
-神仙- 2005-02-17
  • 打赏
  • 举报
回复
第二种可以避免sql注入
wtiancai 2005-02-17
  • 打赏
  • 举报
回复
没错,是一样的
kangdong 2005-02-17
  • 打赏
  • 举报
回复
一样,写法二只不过用了个函数
这跟sql语句没关系
xdk 2005-02-17
  • 打赏
  • 举报
回复
一样的。。
coolwindkaka 2005-02-17
  • 打赏
  • 举报
回复
第一种应该是错误的吧,楼主都说了searchId为字符型变量,那第二种才是正确的

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧