使用来自 PHP 的 UDF MySQL 查询
Posted
技术标签:
【中文标题】使用来自 PHP 的 UDF MySQL 查询【英文标题】:Using a UDF MySQL query from PHP 【发布时间】:2014-05-17 02:52:00 【问题描述】:我读自 mysql doc
要使 UDF 机制起作用,函数必须用 C 或 C++ 编写 并且您的操作系统必须支持动态加载。
...
UDF 包含成为运行服务器一部分的代码,因此当 你写了一个 UDF,你会受到任何和所有适用的约束的约束 编写服务器代码
我想动态创建一个 MySQL 函数(通过使用 php 的 mysqli
提交它),以便我可以在后续查询中使用它。
-
由于我不是
root
管理员用户,我是否无法在安装 MySQL 的基本 Web 托管服务器(例如 HostGator、1and1、GoDaddy)上创建函数?
我在以下查询中的语法有什么问题?它在直接的 MySQL shell(黑匣子)或我的 php 脚本中都不起作用。返回的错误是:
警告:mysqli::query() [mysqli.query]: (42000/1064): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 C:\wamp\www_quac\includes\database 的第 1 行的“分隔符 // 创建函数 IF NOT EXISTS LeaveNumber(str varchar(50)) retur”附近使用正确的语法.php 在第 55 行
这是我在 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()';
【问题讨论】:
旁注...但是:应该有一个UDF标签。 旁注:您不应使用sql-server 标记mysql 问题。请查看the tag wiki,另请查看this meta answer。你想要的标签确实存在,只是你看起来不够努力。 【参考方案1】:您的代码中有两个语法错误:
创建函数不支持if exists
character
是保留的 SQL 关键字。
以下似乎对我有用。我建议使用 SQL 'ide',例如 MySQL 工作台。它会立即显示语法错误。
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 ;
【讨论】:
我实际上在您回答之前发现了这一点,但非常感谢您的努力。另外,我从来不知道 MySQL 工作台。很高兴知道以上是关于使用来自 PHP 的 UDF MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
PHP + Mysql:来自第一个查询的动态表名,用于执行第二个查询