2012-04-11 19 views
0

私はこのストアドプロシージャを持っています。 WampのPhpMyAdminで実行すると、それは実行されたと言われています。クエリでそれを使用しようとすると、その関数は存在しないと言います。私は間違って何をしていますか?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

Editted。また、私はトップユーザーです。私のローカル環境で実行されます。 – 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構文に誤りがあります。 DESC LIMIT 1の近くで使用する正しい構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください。 id = id-1; RETURN id; END '(行6) – AlanPHP

+0

バンプ。お願いします?? :) – AlanPHP

+0

@AlanPHP:遅れて申し訳ありません。答えを編集しました。 –

関連する問題