Как использовать ColdFusion для проверки стоимости базы данных? - PullRequest
0 голосов
/ 26 апреля 2019

Теперь я использую ColdFusion для добавления пользователя:

<cfquery name="adduser" datasource="music" dbtype="ODBC">

    insert into register values('#username#','#password#')
</cfquery>

Если пользователь добавит то же имя пользователя, веб-страница сообщит пользователю, что имя уже занято.Можете ли вы сказать мне, как этого добиться?Я просто не знаю, как написать заявление if.

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Прочный путь - с замками.Это также гарантирует, что вы не сможете, чтобы два человека отправляли одно и то же имя пользователя «в одно и то же время» (если они используют один и тот же веб-сайт?), И вы в конечном итоге вставляете оба.

<cfquery name="adduser">
    INSERT 
    INTO Register(Username,Password)
    OUTPUT INSERTED.Username
    SELECT 
        <cfqueryparam cfsqltype="cf_sql_varchar" value="#Username#" />, 
        <cfqueryparam cfsqltype="cf_sql_varchar" value="#Password#" />
    WHERE <cfqueryparam cfsqltype="cf_sql_varchar" value="#Username#" /> NOT IN (
        SELECT Username
        FROM Register
        WITH(ROWLOCK, UPDLOCK, SERIALIZABLE)
        WHERE Username = <cfqueryparam cfsqltype="cf_sql_varchar" value="#Userame#" />
   )
</cfquery> 

<cfif adduser.RecordCount EQ 1>
    <!--- success ---->
<cfelse>
    <!--- failure ---->
</cfif>

Поскольку вставка может быть потенциально неудачной по разным причинам, если вы действительно хотите быть уверенным, в ошибке "cfelse" вы можете добавить запрос, чтобы проверить, существует ли имя пользователя.

Вам также следует рассмотреть вопрос о том, чтобы сделать это поле БД UNIQUE, чтобы INSERT завершился ошибкой, но в этом случае вам нужно TRY-CATCH запрос, чтобы отловить сбои.

1 голос
/ 26 апреля 2019
  1. Запросите всех пользователей с тем же именем пользователя, что и пользователь, которого вы собираетесь сохранить (для повышения производительности вам максимально нужна 1 строка, чтобы доказать, что он уже есть):

    <cfquery name="checkuseralreadythere" datasource="music">
       SELECT username 
       FROM   register 
       WHERE  username = <cfqueryparam cfsqltype="cf_sql_varchar" 
                            value="#username#"> 
      LIMIT 1
    </cfquery>
    
  2. Программная логика для проверки результатов

    <cfif checkuseralreadythere.recordcount GTE 1>
       <!--- user is already there --->
       Username is already taken. please enter an other username.
       <cflocation url="samepage.cfm?err=1">
        ...do more stuff...
    <cfelse>
       <!--- user is not there yet --->
       <cfquery name="adduser" datasource="music">
          INSERT INTO register 
          VALUES (
               <cfqueryparam cfsqltype="cf_sql_varchar" 
                            value="#username#"> 
               , <cfqueryparam cfsqltype="cf_sql_varchar" 
                            value="#password#">
           )
       </cfquery>
       ...do more stuff...
    </cfif>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...