我从MySQL doc
中读取要使UDF机制起作用,必须用C或C ++编写函数 并且您的操作系统必须支持动态加载。
...
UDF包含成为正在运行的服务器的一部分的代码,因此 你编写一个UDF,你受到任何和所有适用的约束的约束 编写服务器代码
我想动态创建一个MySQL函数(通过使用PHP mysqli
提交它),以便我可以在后续查询中使用它。
root
管理员用户?警告:mysqli :: query()[mysqli.query] :( 42000/1064):您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在'delimiter //创建函数附近使用正确的语法IF NOT EXISTS LeaveNumber(str varchar(50))return'在C:\ wamp \ www_quac \ includes \ database中的第1行第55行的.php
这是我在php中的查询:
if ($Database->query("
delimiter //
create function IF NOT EXISTS LeaveNumber(str varchar(50)) returns varchar(50)
no sql
begin
declare verification varchar(50);
declare result varchar(50) default '';
declare character varchar(2);
declare i integer default 1;
if char_length(str) > 0 then
while(i <= char_length(str)) do
set character = substring(str,i,1);
set verification = find_in_set(character,'1,2,3,4,5,6,7,8,9,0');
if verification > 0 then
set result = concat(result,character);
end if;
set i = i + 1;
end while;
return result;
else
return '';
end if;
end //
delimiter ;")) { echo 'hey the function was written. its called LeaveNumber()'; }
答案 0 :(得分:1)
您的代码中有两个语法错误:
if exists
character
是保留的SQL关键字。以下似乎对我有用。我建议使用SQL&#39; ide&#39;比如MySQL workbench。它会立即显示语法错误。
DROP function IF EXISTS LeaveNumber;
delimiter //
create function LeaveNumber(str varchar(50)) returns varchar(50)
no sql
begin
declare verification varchar(50);
declare result varchar(50) default '';
declare nextChar varchar(2);
declare i integer default 1;
if char_length(str) > 0 then
while(i <= char_length(str)) do
set nextChar = substring(str,i,1);
set verification = find_in_set(nextChar,'1,2,3,4,5,6,7,8,9,0');
if verification > 0 then
set result = concat(result,nextChar);
end if;
set i = i + 1;
end while;
return result;
else
return '';
end if;
end //
delimiter ;