无法创建存储过程 mysql 也许是其他语法


Can't create stored procedure mysql maybe if else syntax

>我尝试编写这样的存储过程,但它不起作用:

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

我尝试使用 PDO 从 php 执行

$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);

没有错误,但我在MySql服务器上看不到它

SHOW CREATE PROCEDURE my_test

所以我尝试将其复制粘贴到 phpmyadmin 的 SQL 窗口中,但出现以下语法错误:

1064 - 您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,了解在"== 'my_in_value'附近使用的正确语法)然后 第 6 行的 SET my_out_var = 'my_out_value1'

正确的语法是什么?为什么PDO不显示错误?

欢迎任何帮助 - 谢谢

请注意,有人向我指出,在我不使用的 PHPMyAdmin 中,以下DELIMITER不是必需的。因此,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