2016-01-21 4 views
-2

Я пытаюсь закодировать проверку входа с помощью функции sql server 2008, а также Я хочу запустить эту функцию на php. Возвращаемая переменная будет BIT, поэтому, если пользователь существует, я получу 1 или a 0, если это не так. Я не могу заставить его работать, я новичок в datbase сервера sql, если кто-то знает решение, ответьте.Создать проверку входа с помощью функции sql sever 2008

Мой код до сих пор:

CREATE FUNCTION dbo.checklogin (@username varchar, @password varchar) 
RETURNS bit 
AS 
    BEGIN 
     Declare @checked bit 

    select @checked = CAST(
    CASE WHEN EXISTS(SELECT * FROM dbo.user where [email protected] and d[email protected] THEN 1 
    ELSE 0) 

     RETURN @checked 
    END 
    GO 

Спасибо за чтение :)!

+0

Вам действительно нужно изменить способ обработки паролей. Они должны хэшировать и солить, а не хранить в виде обычного текста. Было бы полезно включить сообщения об ошибках. Это облегчило бы заметить, что вам не хватает END для выражения вашего случая. И вам также не хватает второй половины вашего броска. –

+0

Это всего лишь прототип, я сделаю необходимые изменения заранее. Благодарим за комментирование. Как мне закончить выражение case? –

+0

это ошибка, которую я получаю: Msg 156, уровень 15, состояние 1, проверочный лог процедуры, строка 8 Неверный синтаксис рядом с ключевым словом «THEN». –

ответ

1

Это действительно нуждается в полном переосмыслении, потому что вам нужно хранить хешированные и соленые пароли вместо обычного текста. Я позволил превратить эту скалярную функцию в встроенную функцию, ориентированную на таблицу. Он намного более гибкий и будет работать лучше. Надеюсь, у вас есть уникальное ограничение на имя пользователя в вашей таблице. но при забросе биты любого значения> = 1 будет 1.

CREATE FUNCTION dbo.checklogin (@username varchar, @password varchar) 
RETURNS table as return 
    select CAST(count(*) as bit) as UserFound 
    FROM dbo.user 
    where dbo.user.username = @username 
     and dbo.user.password = @password 

Лечение это чисто академический здесь правильный синтаксисом для методологии вы пытаетесь писать.

CREATE FUNCTION dbo.checklogin (@username varchar, @password varchar) 
RETURNS bit 
AS 
    BEGIN 
     Declare @checked bit 

     select @checked = CAST(
     CASE WHEN EXISTS 
     (
      SELECT * 
      FROM dbo.[user] u 
      where u.username = @username 
       and u.password = @password 
     ) THEN 1 
     ELSE 0 END as bit) 

     RETURN @checked 
    END 
+0

Это выглядит хорошо, спасибо Шон! Теперь проблема в том, как сохранить значение бита в переменной php? Beacause похоже, что это вернет массив, или я ошибаюсь? –

+1

Он вернет стол. Вы можете использовать редактирование, где я исправил код. Я не собираюсь вставлять это в переменную php. Я даже не могу написать php, не говоря уже об этом. –

+0

Теперь я прочитал второй блок, вставленный, много спасибо .... –

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