2012-05-24 2 views
2

Possible Duplicate:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectПолучение возвращаемого значения из функции MySQL в PHP

У меня есть следующая MySQL Функция:

DELIMITER $$ 
DROP FUNCTION IF EXISTS DoUsernameAndPasswordMatch$$ 
CREATE FUNCTION DoUsernameAndPasswordMatch(
    UserLogin VARCHAR(20), 
    UserPass VARCHAR(20) 
) 
RETURNS BOOLEAN 
BEGIN 
DECLARE userCount BOOLEAN; 

    SELECT COUNT(*) INTO userCount 
    FROM Users_Login 
    WHERE Users_Login.UserLogin = UserLogin AND Users_Login.UserPass = SHA1(UserPass); 

    RETURN userCount;  
END$$ 
DELIMITER ; 

Я призываю его из PHP, как это:

$username_escaped = escapeMySQLParam($_POST["user"]); 
$userpass_escaped = escapeMySQLParam($_POST["pass"]); 

$mysql_query = "SELECT DoUsernameAndPasswordMatch('$username_escaped', '$userpass_escaped')"; 
$mysql_results = mysql_query($mysql_query); 
$mysql_row = mysql_fetch_row($mysql_results); 

Но я получаю следующее ошибка:

Warning: mysql_fetch_row() expects parameter 1 to be resource, 
boolean given in D:\xampp\webdesktop\login.php on line 22 

Я понимаю ошибку и пытаюсь ее исправить и обходиться без успеха. Можно ли получить значение INTEGER из MySQL в PHP и как?

Или вы могли бы посоветовать мне лучший способ сделать это.

Thank!

+0

Этот вид ошибки происходит, когда ваш запрос возврата нуль. вы пробовали свой запрос sql? – zessx

+0

Вы пытались сбросить $ mysql_results, чтобы узнать, что вы получаете? Похоже, что, возможно, он приводит результат процедуры непосредственно в переменную, вместо того, чтобы возвращать ресурс SQL (например, вы можете запустить mysql_fetch_row on). Другая возможность, как сказал samsamX, заключается в том, что ваш запрос сломан и ничего не возвращает. – octern

+0

Да, я повторил свою строку запроса и выполнил в MySQL IDE, все было в порядке, и я получил результат «1» – iatanasov

ответ

0

сделать следующие изменения в работе:

DELIMITER $$ 
DROP FUNCTION IF EXISTS DoUsernameAndPasswordMatch$$ 
CREATE FUNCTION DoUsernameAndPasswordMatch(
    UserLogin VARCHAR(20), 
    UserPass VARCHAR(20) 
) RETURNS TEXT 
BEGIN 
DECLARE userCount TEXT; 

    SELECT COUNT(*) INTO userCount 
    FROM Users_Login 
    WHERE Users_Login.UserLogin = UserLogin AND Users_Login.UserPass = SHA1(UserPass); 

    RETURN userCount;  
END$$ 
DELIMITER ; 
Смежные вопросы