在MySQL存储过程中将FieldName作为参数传递

时间:2012-04-03 13:06:29

标签: mysql

我将表字段名称作为参数传递给存储过程但是存储过程将字段名称作为值而不是字段名称并抛出错误。

例如,如果我通过参数FieldName传递值isEnabled,则Mysql会在字段列表中抛出错误未知列'isEnabled',这表示mysql会自动添加引号。

这是我写的示例存储过程。

CREATE `VSK_Comments_UpdateAction`(IN FieldName varchar(30),IN FieldValue tinyint,CID bigint)
BEGIN
Update comments Set FieldName=FieldValue WHERE commentid=CID;
END;

是否有办法可以正确地动态传递字段名称。

1 个答案:

答案 0 :(得分:7)

您可以使用prepared statements,例如 -

CREATE `VSK_Comments_UpdateAction`(IN FieldName varchar(30),IN FieldValue tinyint,CID bigint)
BEGIN
  SET @query = CONCAT('Update comments Set ', FieldName, '=? WHERE commentid=?');
  PREPARE stmt FROM @query;
  SET @FieldValue = FieldValue;
  SET @CID = CID;
  EXECUTE stmt USING @FieldValue, @CID;
  DEALLOCATE PREPARE stmt;
END;