簡體   English   中英

如何在php中編寫mysql用戶自定義函數

[英]How to write mysql user defined function in php

請告訴我如何在PHP中定義MySQL用戶定義函數...

我正在使用以下代碼。但它無法正常工作。

它拋出錯誤:

“(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時,我得到語法錯誤...

請給我一個“VALUE RETURNING FUNCTION”的示例代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM