【问题标题】:stored procedure in mysql to make a select with variable paramsmysql中的存储过程使用变量参数进行选择
【发布时间】:2013-09-05 18:51:53
【问题描述】:

我在 MySQL 中的存储过程遇到问题。我需要从 PHP 代码中调用它(我不能直接从代码中使用 select)。该过程从表单接收参数,这些参数可以是字符串或数值(如果用户填写输入)或 null(如果用户将输入留空)。

我编写了这段代码,但它不起作用(过程和变量名称都是西班牙语)并且没有显示任何错误。

DELIMITER $$

CREATE PROCEDURE ps_BusquedaVarParam
    (IN nombre varchar(30), apellidos varchar(50), minEdad int, maxEdad int)
BEGIN
  SELECT * FROM alumnos WHERE 
(nombre is null or Nombre = nombre) and 
(apellidos is null or Apellido = apellidos) and 
(minEdad is null or Edad>=minEdad) and 
(maxEdad is null or Edad<=maxEdad);
END $$

DELIMITER ;

【问题讨论】:

  • 你能比“它不起作用”更具体吗?您看到了什么错误?
  • MySQL 没有显示任何错误,但程序没有返回正确的数据。如果 send as 值存储在表中的名称(名词)和三个 null,则过程显示一个空表而不是正确的行。

标签: php mysql sql stored-procedures


【解决方案1】:

试试看:

DELIMITER $$

CREATE PROCEDURE ps_BusquedaVarParam(nombre_in varchar(30), apellidos_in varchar(50), minEdad_in int, maxEdad_in int)
BEGIN
 SELECT * FROM alumnos WHERE 
(nombre_in is null or Nombre = nombre_in) 
and (apellidos_in is null or Apellido = apellidos_in) 
and (minEdad_in is null or Edad>=minEdad_in) 
and (maxEdad_in is null or Edad<=maxEdad_in);
END $$

DELIMITER ;

【讨论】:

  • 它有效,谢谢。我想问题出在变量的名称上,因为与以小写开头的字段名称相同。
  • @DonnieRock 请接受答案,这是在这里表示感谢并向其他人表示问题已经解决的常用方式。看看它是如何工作的here.
猜你喜欢
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2016-06-04
  • 2012-12-12
  • 1970-01-01
  • 2016-07-03
相关资源
最近更新 更多