0

ユーザーが HTML フォームに入力した内容に応じて、データベースからのデータを表示するコードを ADO で作成しようとしています。ユーザーからの入力を変数として設定し、この変数を使用してデータベースにクエリを実行するようにSQLを設定して試しましたが、機能していません。私のコードは現在次のようになっています。

<!DOCTYPE html>
<html>
<title>
Query
</title>
 <body>
 <form name="teacherReg" action="http://hr-computing/public/AlexS/Tests/UserQuery.asp" method="POST">
<input type="text" name="firstnameQuery">
<input type="submit" value="submit">
      </form>
<%
Query=request.form("firstnameQuery")
set conn=Server.CreateObject("ADODB.Connection")
conn.Open ="{private}"
set rs=Server.CreateObject("ADODB.recordset")
sql="SELECT firstname, lastname, PASSWORD FROM teachers WHERE firstname = Query"
rs.Open sql,conn


%>
<%
do until rs.EOF
   for each x in rs.Fields
     Response.Write(x.name)
     Response.Write(" = ")
     Response.Write(x.value & "<br>")
   next
   Response.Write("<br>")
   rs.MoveNext
 loop

rs.close

%>


</body>
</html>

現在エラーが発生しています

Microsoft OLE DB Provider for ODBC Drivers エラー '80040e14'

[MySQL][ODBC 3.51 ドライバー][mysqld-5.0.45-community-nt]'where 句' の不明な列 'Query'

なぜ機能しないのかわかりません、何か助けてくれますか?

4

1 に答える 1

1

queryの値をコマンドに渡していません

試す

    Dim Conn As ADODB.Connection
Dim Cmd As ADODB.Command
Dim Parm As ADODB.Parameter
Dim Rset as ADODB.Recordset

Set Conn = New ADODB.Connection
Cn.Open "{private}"
Set Cmd = New ADODB.Command

Cmd.ActiveConnection = Conn 
Cmd.CommandText = "SELECT firstname, lastname, PASSWORD FROM teachers WHERE firstname = ?;"
Cmd.CommandType = adCmdText
Set Parm = Cmd.CreateParameter("firstname", adVarChar, adParamInput)
Parm.Value = Query
Cmd.Parameters.Append Parm 
Set Rset = Cmd.Execute

これに変更することで実行できます...

sql="SELECT firstname, lastname, PASSWORD FROM teachers WHERE firstname = '" & Query & "'"

しかし、誰もが言うように、これは SQL インジェクションに対してオープンであり、良い考えではありません。

于 2013-10-18T09:07:55.583 に答える