2016-07-07 36 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