如果在 phpmyadmin 触发器中不工作

Posted

技术标签:

【中文标题】如果在 phpmyadmin 触发器中不工作【英文标题】:If else not working in phpmyadmin trigger 【发布时间】:2015-05-18 09:56:31 【问题描述】:

所以我在 phpmyadmin 中使用 mysql 触发器。这是我对表 scorm_track 的触发器:

UPDATE userbatch 
LEFT JOIN scorm_track 
ON      
        (userbatch.user_id = scorm_track.userid)
LEFT JOIN trainingobject
ON      
        (scorm_track.tobjid = trainingobject.id)
IF scorm_track.element = 'cmi.core.lesson_status' THEN
    SET userbatch.to_completion = scorm_track.value,
        userbatch.trainingcompleted = scorm_track.timemodified;
ELSEIF scorm_track.element = 'cmi.core.score.raw' THEN
    SET userbatch.comment = scorm_track.value;
ENDIF;
WHERE (userbatch.batch_id = trainingobject.batchid) AND 
        scorm_track.id=NEW.id AND 
        scorm_track.element = 'cmi.core.lesson_status' OR scorm_track.element = 'cmi.core.score.raw'

但它显示以下错误:“MySQL 说 #1064 - You have an error in your SQL syntax...”

这个问题是在我添加了 IF ELSE 语句后开始出现的。它以前工作正常。谁能说明为什么会发生这种情况?

【问题讨论】:

【参考方案1】:

这是因为加入时更新语法错误。 if-else 的用法在这里是错误的。查询应该是

update userbatch ub
left join scorm_track st on ub.user_id = st.userid
left join trainingobject tob on tob.id = st.tobjid
set
ub.to_completion = 
 case 
   when st.element = 'cmi.core.lesson_status' then st.value 
 end ,
ub.to_completion = 
 case when st.element = 'cmi.core.lesson_status' then st.value 
end, 
ub.trainingcompleted = 
 case when st.element = 'cmi.core.lesson_status' then st.timemodified 
end, 
ub.comment = 
case when st.element = 'cmi.core.score.raw' then st.value 
end
where 
ub.batch_id = tob.batchid
and st.id = new.id 
and ( st.element = 'cmi.core.lesson_status' or st.element = 'cmi.core.score.raw )

【讨论】:

请注意,当没有指定 ELSE 并且没有任何表达式的计算结果为 true 时,case 语句将导致 NULL。 正如 Gervs 所指出的,当遇到 cmi.core.score.raw 时,trainingcompleted 和 to_completion 列被设置为 NULL。还有什么办法吗?

以上是关于如果在 phpmyadmin 触发器中不工作的主要内容,如果未能解决你的问题,请参考以下文章

从 PHPMyAdmin 中删除数据时,DELETE 链接在 PHP 中不执行任何操作

MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作

MultyQuery 在 phpmyadmin 中工作,在 Mysqli 中不工作,在其他服务器上工作

latin1 在 Phpmyadmin 的字符集中不可用

Ubuntu 18.04 LTS 中不存在 conf php7.1-cgi

在 phpmyadmin 上插入触发器