sql >> Database >  >> RDS >> Sqlserver

Voorwaardelijke instructie in sql-query op klassieke ASP-pagina

In VBScript kunt u het en-teken (&) gebruiken om strings samen te voegen. Probeer dit:

strSqlData="select * from MyTable where gender='male'" 

if AcademicYear <> "" then 
strSqlData= strSqlData & " and AcademicYear=" & AcademicYear
end if

if Batch <> "" then
strSqlData= strSqlData & " and Batch=" & Batch    
end if  

if School <> "" then 
strSqlData= strSqlData & " and School=" & School
end if  

U hebt drie afzonderlijke "en"-clausules om aan uw SQL-query toe te voegen. De voorwaardelijke instructies zijn onafhankelijk van elkaar, dus u moet elseif . niet gebruiken dat is voor verschillende opties binnen een enkele voorwaardelijke instructie. Het is eenvoudiger om te controleren of een string niet leeg is if stringname <> "" dan het gebruik van len , (en ik betwijfel of je voorwaardelijke uitspraken zouden werken omdat je een kleine letter "o" lijkt te gebruiken waar je een nul zou moeten gebruiken)

Het is heel gemakkelijk om fouten te maken bij het samenstellen van SQL-query's zoals deze. Bij het testen is het vaak de moeite waard om een ​​regel toe te voegen zoals Response.Write strSqlData voordat u het probeert uit te voeren om te controleren of de zoekopdracht is wat u bedoelde

Zoals andere opmerkingen echter hebben gesuggereerd, is uw code kwetsbaar voor een SQL-injectie-aanval. URL's die ".asp?" bevatten kan bijna gegarandeerd worden geraakt door een ASPROX-achtige aanval, vroeg of laat. Query's met parameters zijn de beste manier om u hiertegen te beschermen, maar een snelle aanpak als uw querystring-waarden allemaal numeriek zijn, is om cint() te gebruiken. - bijv.

strSqlData= strSqlData & " and AcademicYear=" & cint(AcademicYear)

Dit geeft een type mismatch-fout als de querystring iets anders dan getallen bevat, en het script zal omvallen voordat het probeert uw sql-query uit te voeren.



  1. Hoe kan ik het totale aantal MySQL-query's tellen dat per pagina is gebruikt?

  2. Verschil in SQL Tussen operator en>=&<=operator

  3. Veerboot CLIENT_PLUGIN_AUTH is vereist

  4. Oracle:maak een samengestelde sleutel met drie Foregin-sleutels