我有一个我在传统ASP中维护的网站。非常直接的sql语句,带回除Remote之外的所有值。此特定人员的数据库中的值为1,但值将返回空白。什么可能导致价值不能通过的想法?数据库中的字段定义为一个接受NULL值的整数。
这是SQL语句:
strSQL = "SELECT PersonID, HRID, EligibleSponsor, FirstName, LastName, Title, Role, Cell, EntityID, Email,"
strSQL = strSQL & " WorkgroupID, Location, Extension, PhoneNumber, Display, DisplayPicture, LocationID, SupervisorID,"
strSQL = strSQL & " DID, HireDate, BirthDate, AboutMe, Type, Site, Remote, del, CostCenterID"
strSQL = strSQL & " FROM Person WHERE PersonID=" & Request("PersonID")
当值应为1时,这是空的值。
iRemote = rs("Remote")
除了这一个字段外,其他所有内容都正确回归。
我在同一站点的另一个页面上也有类似的SQL语句,该值正确,但不适用于此页面。我比较了这些页面但找不到任何不同的东西来获得价值。
答案 0 :(得分:3)
首先,您的代码对SQL注入攻击是敞开的。我知道它与您的问题无关,但拥有此类代码非常糟糕,因为任何人都可以控制您的数据库以及可能的整个Web服务器。
其次,一些字段名称可能是保留字,包括" Remote"。这可能解释了这个问题。
第三,取决于您使用iRemote
如何导致问题,因为rs("Remote")
会返回一个复杂的对象,而不是一个整数。
以下是代码的优化版本,它既可以防止SQL注入攻击,又应该返回正确的值:
strSQL = "SELECT PersonID, HRID, EligibleSponsor, FirstName, LastName, [Title], [Role], [Cell], EntityID, [Email],"
strSQL = strSQL & " WorkgroupID, [Location], [Extension], PhoneNumber, [Display], DisplayPicture, LocationID, SupervisorID,"
strSQL = strSQL & " [DID], HireDate, BirthDate, AboutMe, [Type], [Site], [Remote], [del], CostCenterID"
strSQL = strSQL & " FROM Person WHERE PersonID=?"
set objCommand = Server.CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = strSQL
objCommand.Parameters(0).value = Request("PersonID")
Set rs = objCommand.Execute()
''...
iRemote = CLng(rs.Fields("Remote").Value)