2009-09-24 9 views
0

У меня есть классическая страница ASP с кодом для проверки наличия электронной почты в таблице следующим образом:Проверьте, существует ли электронная почта

<% 
    '' //Check the submitted email against existing ones in the database 
    set CmdCheckEmail = server.CreateObject("ADODB.Command") 
    CmdCheckEmail.ActiveConnection = MM_dbconn_STRING 
    CmdCheckEmail.CommandText = "SELECT COUNT(ReferredEmail) AS 'CountEmail' FROM TenantReferral WHERE ReferredEmail = '" & Request("Email") & "'" 
    Response.Write(CmdCheckEmail.CommandText) 
    CmdCheckEmail.CommandType = 1 
    CmdCheckEmail.CommandTimeout = 0 
    CmdCheckEmail.Prepared = true 
    CmdCheckEmail.Execute() 

    countEmail = CmdCheckEmail("CountEmail") 

    set CmdCheckEmail = nothing 
    conn.close 
    set conn = nothing 

    If(countEmail >= 1) Then 
     Message = Message & "<p>This email address has already been referred.</p>" 
    End If 
%> 

Тем не менее, страница сообщает о следующей ошибке;

SELECT COUNT(ReferredEmail) AS 'CountEmail' FROM TenantReferral WHERE ReferredEmail = '[email protected]' 

ADODB.Command error '800a0cc1' 

Item cannot be found in the collection corresponding to the requested name or ordinal. 

/default2.asp, line 19 

Строка 19 следующая:

countEmail = CmdCheckEmail("CountEmail") 

Электронная почта существует в таблице, и таблица просто имеет следующие столбцы; ReferredEmail и ReferredCode

Я задавался вопросом, может ли кто-нибудь пролить свет на эту ошибку?

спасибо.

ответ

0

Примечание уверены, что базы данных вы используете, но попробуйте изменить SQL в:

SELECT COUNT(ReferredEmail) AS CountEmail FROM TenantReferral WHERE ReferredEmail = '[email protected]' 

Затем измените

CmdCheckEmail.Execute()  
countEmail = CmdCheckEmail("CountEmail") 

в

set rs = CmdCheckEmail.Execute() 
countEmail = rs("CountEmail") 

Кроме того, у вас есть вопрос инъекции SQL с этим запросом. Вы должны использовать parameterized queries.

+0

@Orbman - Я использую базу данных MSSQL, но все же сообщаю об одной и той же ошибке, используя «CountEmail» или CountEmail :( – doubleplusgood

+0

Вы используете cmd неверный объект, см. мое редактирование. – RedFilter

+0

Спасибо Orbman. Теперь я получаю требуемый объект: «conn» /default2.asp, ошибка строки 20. – doubleplusgood

0

CmdCheckEmail("CountEmail") пытается получить доступ к члену по умолчанию объекта Command, который представляет собой набор параметров. Однако вы не хотите получать доступ к параметру, кроме поля результирующего набора записей.

Попробуйте это (не проверено):

Set rs=CmdCheckEmail.Execute() 

countEmail = rs("CountEmail") 

Кроме того, будьте осторожны: Эта строка:

CmdCheckEmail.CommandText = "SELECT COUNT(ReferredEmail) AS 'CountEmail' FROM TenantReferral WHERE ReferredEmail = '" & Request("Email") & "'" 

уязвима к SQL injection атаке.

Никогда не вставляйте литеральные строки в инструкцию SQL; используйте параметры. (В этом случае вы сделали бы это, используя коллекцию Command.Parameters.)

Смежные вопросы