Скажите, пожалуйста, как определить пользовательскую функцию 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, я получаю синтаксическую ошибку …
Пожалуйста, дайте мне пример кода для «ФУНКЦИИ ВОЗВРАЩЕНИЯ ЗНАЧЕНИЯ»
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. Я добавил его в качестве ответа, чтобы он не был беспорядочным и не читался.
$ 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();
}