2016-07-07 46 views
0

我嘗試寫這樣一個存儲過程,但它不工作:不能創建存儲過程的mysql也許如果別的語法

DROP PROCEDURE IF EXISTS `my_test`; 
CREATE PROCEDURE `my_test`(
    IN my_in_var VARCHAR(255), 
    OUT my_out_var VARCHAR(255) 
) 
BEGIN 
    IF(in_var == 'my_in_value') THEN 
    SET my_out_var = 'my_out_value1'; 
    ELSE 
    SET my_out_var = 'my_out_value2'; 
    END IF; 
END 

我嘗試從PHP和PDO

$conn = new PDO("mysql:host=".$mysql_host.";dbname=".$mysql_bd, $mysql_user, $mysql_password); 
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$conn->exec($sql); 
執行

沒有錯誤,但我不能

SHOW CREATE PROCEDURE my_test 

看到它的MySQL服務器,所以我試圖複製粘貼在phpMyAdmin的SQL窗口和我此語法錯誤:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== 'my_in_value') THEN SET my_out_var = 'my_out_value1'' at line 6

什麼是正確的語法?爲什麼PDO不顯示錯誤?

任何幫助是值得歡迎的 - 感謝

+0

丟失包裹'DELIMITER'? – Drew

+0

您是否嘗試使用'='而不是'=='? – currarpickt

+0

是啊,如果你修復它,節省了 – Drew

回答

1

注意,它已經向我指出的是,下述DELIMITER是不是在phpMyAdmin必要的,這我不使用。所以,DELIMITER是客戶端的東西,比如像MySQL Workbench那樣需要的東西。

存儲過程:

DROP PROCEDURE IF EXISTS `my_test`; 
DELIMITER $$ 
CREATE PROCEDURE `my_test`(
    IN my_in_var VARCHAR(255), 
    OUT my_out_var VARCHAR(255) 
) 
BEGIN 
    IF (my_in_var = 'my_in_value') THEN 
    SET my_out_var = 'my_out_value1'; 
    ELSE 
    SET my_out_var = 'my_out_value2'; 
    END IF; 
END$$ 
DELIMITER ; 

測試:

set @outme=''; 
call my_test('lizard',@outme); 
select @outme; 
-- my_out_value2 

set @outme=''; 
call my_test('my_in_value',@outme); 
select @outme; 
-- my_out_value1 

所以,你需要弄清楚你的意圖是與上面的東西。

您有雙=的語法錯誤。而你可能在in_var中有一個不存在的錯字。

的phpMyAdmin(所以有人告訴我,不需要分隔符):

DROP PROCEDURE IF EXISTS `my_test`; 
CREATE PROCEDURE `my_test`(
    IN my_in_var VARCHAR(255), 
    OUT my_out_var VARCHAR(255) 
) 
BEGIN 
    IF (my_in_var = 'my_in_value') THEN 
    SET my_out_var = 'my_out_value1'; 
    ELSE 
    SET my_out_var = 'my_out_value2'; 
    END IF; 
END 
+0

我想要的是在PHP中設置$ my_in_value ...將它發送給SP,並從SP中獲取@my_out_var值,以便在PHP中使用。 但是首先我需要創建存儲過程...所以首先我試圖去解決這個問題 – MTK

+0

好吧,可能沒有@my_out_var和php的概念。您可能完全只需從PHP進入和退出。爲什麼還會有一個@ var ...我只是將它作爲一個示例從一個需要證明它的mysql客戶端中調用它的示例 – Drew

+0

因此,您編寫了一個存儲過程。用弓包起來。它可以從像java,c#,PHP,python等任何象樣的環境中調用。 – Drew