0

我有这个存储过程。当我在 Wamp 上的 PhpMyAdmin 中执行它时,它说它执行了一切。当我尝试在查询中使用它时,它说该功能不存在。我究竟做错了什么?

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); }

谢谢。

4

2 回答 2

1

您希望将例程创建为函数而不是存储过程。

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 ;
于 2012-04-11T21:17:44.433 回答
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;

这就是我最终用来使它工作的东西。谢谢!希望这对某人有帮助!

于 2012-04-13T04:18:55.360 回答