【发布时间】:2021-07-27 23:13:53
【问题描述】:
我们有一个 MySql 存储过程,其中包括以下内容:
SET @queryString = (SELECT CONCAT("UPDATE Table2 t ",
"JOIN vTable1 v ",
"ON t.id.=v.id ",
"SET t.sub_id_track = 1, t.prefix = '", newPrefix,"',",
" t.sub_id = ", vIndex,
";"));
PREPARE update_sql FROM @queryString;
EXECUTE update_sql;
这很好用。
我们现在需要改变它,以便
如果newPrefix 包含任何值,则
SET t.sub_id_track = 1
但如果 newPrefix 为 null 或为空,则
SET t.sub_id_track = 0
这样做的正确方法是什么?
谢谢
【问题讨论】:
-
为什么这是一个准备好的查询,因为除了值之外没有动态部分?您可以只在未准备的 UPDATE 语句中使用局部变量。另外你为什么在同一个更新中
SET t.sub_id两次?您确定您的转录正确吗? -
另外,当您将
newPrefix复制到查询字符串中时,您会遇到 SQL 注入漏洞。不知道你为什么不使用查询参数来保护它。 -
是的,抄写有误,已更正问题,谢谢指出
-
看起来还是不对。
ON tid.=v.id应该是ON t.id=v.id吗? -
是的,已更正,谢谢
标签: mysql sql stored-procedures