Как написать mysql пользовательскую функцию в переполнении стека

Скажите, пожалуйста, как определить пользовательскую функцию MySQL с помощью PHP …

Я использую следующий код. Но он не работает.

выдает ошибку:

«(1313) ВОЗВРАТ разрешен только в ФУНКЦИИ»

$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, я получаю синтаксическую ошибку …

Пожалуйста, дайте мне пример кода для «ФУНКЦИИ ВОЗВРАЩЕНИЯ ЗНАЧЕНИЯ»

3

Решение

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. Я добавил его в качестве ответа, чтобы он не был беспорядочным и не читался.

0

Другие решения

$ 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();
}
-1

По вопросам рекламы [email protected]