【问题标题】:how to define a stored procedures which accepts 2 parameteres如何定义一个接受 2 个参数的存储过程
【发布时间】:2014-07-31 11:02:45
【问题描述】:

我正在尝试定义一个接受 2 个参数的存储过程,一个是表列,它必须与我将提供的第二个参数相等。 代码:

 DELIMITER $$

    CREATE DEFINER=`root`@`localhost` PROCEDURE `selectUserByField`(IN _field varchar(150) , IN _value varchar(150))
    BEGIN
  SET @sql = CONCAT('SELECT * FROM Users WHERE', _field, '=' ,_value);
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
    END

问题是我不知道如何将 _value 参数作为字符串提供。如果我像这样运行它,我会在'=myEmail'附近得到一个Mysql 1064('userEmail','myEmail'的参数)。谢谢!

【问题讨论】:

  • 你准备了两次。你执行的是哪一个?
  • 你说得对,我做了一个编辑,这是另一个测试查询

标签: mysql statements procedures


【解决方案1】:

在下面的代码中,WHERE 后面缺少一个空格。它应该如下所示;在WHERE= 之后留一个空格

SET @sql = CONCAT('SELECT * FROM Users WHERE ', _field, ' = ' ,_value);

【讨论】:

  • 您确定,您使用了答案中发布的确切代码;因为现在查询将像SELECT * FROM Users WHERE userEmail = myEmail 一样形成,应该可以正常工作;而在您发布的代码中,查询形成为SELECT * FROM Users WHEREuserEmail = myEmail,因此您收到 1064 语法错误。如果除了您发布的内容之外还有其他内容,那么这对我来说就是一个黑匣子。
  • CONCAT('SELECT * FROM Users WHERE ', _field, ' = ' ,_value);
  • 我设法让它适用于像 ID 这样的数值,但是当我用字符串访问它时它不会返回任何东西
  • 你知道有什么方法可以告诉 mysql 'myEmail' 是一个字符串吗?
  • 我的最终查询是:SET @sql = CONCAT('SELECT * FROM Users WHERE ', _field, ' = ' , '"', _value, '"'); PREPARE stmt FROM @sql;
猜你喜欢
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多