2012-04-11 5 views
0

У меня есть эта хранимая процедура. Когда я выполняю его в своем PhpMyAdmin на Wamp, он говорит, что он выполнен и все. Когда я пытаюсь использовать его в запросе, он говорит, что функции там нет. Что я делаю не так?Mysql Сохраненная процедура не существует?

DELIMITER // 

CREATE PROCEDURE `sql_level`(IN exp INT) 
BEGIN 
    SELECT id 
    FROM `levels` 
    WHERE experience <= exp DESC LIMIT 1; 
     id = id-1; 
END // 

DELIMITER ; 

Вот запрос, который я пытаюсь запустить.

$id = 1; 
if($stmt->prepare("SELECT sql_level(attack) FROM `users` WHERE id = ?")) { 
$stmt->bind_param('i',$id); 
$stmt->execute(); 
$stmt->bind_result($attack); 
$stmt->fetch(); echo "<h1 align='center'>".$attack."</h1>"; } 
else { die($stmt->error); } 

Спасибо.

+1

Вы проверили, доступен ли SP для учетной записи пользователя, которую вы используете в своем приложении? phpmyadmin обычно имеет учетную запись суперпользователя для доступа к mysql, и ваше приложение, скорее всего, этого не делает. –

+0

Когда я пытаюсь использовать его в запросе, он говорит, что функции там нет .:- Можете ли вы предоставить свой запрос здесь? –

+0

Редактирование. Кроме того, я главный пользователь. Он работает в моей локальной среде. – AlanPHP

ответ

0
DELIMITER | 
CREATE FUNCTION `sql_level`(exp INT) 
RETURNS INT 
DETERMINISTIC 
BEGIN 
DECLARE ReturnId INT; 

SELECT id-1 INTO ReturnId 
FROM `levels` 
WHERE experience <= exp; 

RETURN ReturnId; 
END; 

Это то, что я в конечном итоге с помощью чтобы сделать его работу. Благодаря! Надеюсь, это поможет кому-то!

1

Вы хотите создать свою рутину как function вместо хранимой процедуры.

DELIMITER // 

CREATE FUNCTION `sql_level`(exp INT) 
RETURNS INT 
BEGIN 
    DECLARE ReturnId INT; 

    SELECT id-1 INTO ReturnId 
    FROM `levels` 
    WHERE experience <= exp DESC LIMIT 1; 

    RETURN ReturnId; 
END // 

DELIMITER ; 
+0

Я получаю сообщение об ошибке. # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «DESC LIMIT 1»; id = id-1; RETURN id; END 'в строке 6 – AlanPHP

+0

Bump. Пожалуйста?? :) – AlanPHP

+0

@AlanPHP: Извините за задержку. Отредактировал ответ. –

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