如何在PHP中编写MySQL用户定义函数

3
请告诉我如何在PHP中定义MySQL用户定义函数...
我正在使用以下代码,但它不起作用。
它会抛出错误:
"(1313)只允许在函数中使用RETURN"
$mysqli = new mysqli( $DBHost, $DBUserName, $DBPassword, $DBName );


$Query =
"CREATE PROCEDURE FunGetRegistryValue(OUT Param_RegistryKey varchar(40))
BEGIN
    DECLARE vResult varchar(90);
    SELECT  iFnull(Value,'') INTO vResult FROM Project_Registry Where RegistryKey=Param_RegistryKey;
    RETURN(vResult);
END;";

if( !$mysqli->query( $Query ) ) {
    echo "Stored procedure creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}

当我使用FUNCTION关键字而不是PROCEDURE时,会出现语法错误...

请给我一个“VALUE RETURNING FUNCTION”的示例代码。

2个回答

0
DELIMITER $$ 
CREATE DEFINER=root@localhost
FUNCTION FunGetRegistryValue(Param_RegistryKey varchar(40)) 
RETURNS varchar(90) 
CHARSET latin1 DETERMINISTIC 
BEGIN 
    DECLARE vResult varchar(90); 
    SELECT iFnull(Value,'') INTO vResult 
    FROM Project_Registry Where RegistryKey=Param_RegistryKey;
    RETURN(vResult); 
END$$ 
DELIMITER ;

原本是Fozia的评论。我将其添加为答案,以便它不会成为混乱的连续查询,并且易于阅读。


-1

$mysqli = new mysqli($DBHost, $DBUserName, $DBPassword, $DBName);

(这段代码与编程有关)
$Query =
"DROP FUNCTION IF EXISTS FunGetRegistryValue;

CREATE   FUNCTION FunGetRegistryValue(Param_RegistryKey VARCHAR(40)) RETURNS VARCHAR(90) CHARSET latin1
   DETERMINISTIC
BEGIN
   DECLARE vResult VARCHAR(90);
   SELECT  IFNULL(VALUE,'') INTO vResult FROM Project_Registry WHERE RegistryKey=Param_RegistryKey;
   RETURN(vResult);
   END;";

if( !$mysqli->multi_query( $Query ) ) {
    echo $mysqli->error;
    exit();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接