我找到了关于如何为执行 mysql 语句提供条件逻辑的答案 ( https://stackoverflow.com/a/7537348/627473 )。似乎工作得很好。
但我需要找到一种方法来针对非常具体的条件执行代码。仅当数据库支持 innodb 的 FULL TEXT 索引时,代码才能执行。这发生在 mysql 5.6.4 或更高版本中。但是我也需要这个来为 maria db 的其他 mysql 分支工作。
我确定我可以找到 mysql 版本的方法;但我真的不喜欢依赖版本,而宁愿依赖功能检测。
有没有办法做到这一点?
编辑:这是代码。我只是有更多错误,我不确定是否可以修复。
在 phpMyAdmin"#2014 - Commands out of sync; you can't run this command now"
中显示错误。CLI 不会发生这种情况。有没有解决的办法?
delimiter //
create procedure update_phppos()
begin
set @supports_ft := (SELECT COUNT(*) FROM information_schema.GLOBAL_VARIABLES WHERE Variable_name = 'innodb_ft_cache_size');
if @supports_ft > 0 then
REPLACE INTO `phppos_app_config` (`key`, `value`) VALUES ('version', '15.0');
else
SELECT 'An error has occured. You MUST have mysql 5.6.4 or higher to update php point of sale' as 'ERROR';
end if;
end;
//
delimiter ;
-- Execute the procedure
call update_phppos();
-- Drop the procedure
drop procedure update_phppos;
计划 A: 注意如果版本早于某个版本,您可以如何注释:(我运行的是 5.6.12。)
您可以在 的输出中看到很多示例
mysqldump
。B 计划:
@@version
您还可以在存储过程(或客户端代码)中进行 解析。Plan C: 或者,也许这个
编辑:唯一的问题是它只适用于 mysql 5.7 中的 ROOT 用户。有人知道其他方法吗?
适用于 mysql 5.5、5.6、5.7