在Xlight FTP服务器使用数据库存储过程 [ 网站地图 ]

发表于:2010-6-28 浏览:112 作者: 来源:互联网

关键字:Xlight FTP服务器,数据库,存储过程

描述:许多数据库系统支持存储过程.我们使用MySQL数据库作为例子.使用MySQL之前,你必须下载最新的MySQLODBCDriver-3.51.16或者更高版本.否则,因为MySQL的Bug#27544,第二次SQL查询将会失败.其他类型的数据库,你也

许多数据库系统支持存储过程. 我们使用MySQL数据库作为例子. 使用MySQL之前, 你必须下载最新的 MySQL ODBC Driver - 3.51.16 或者更高版本. 否则,因为MySQL的Bug #27544, 第二次SQL查询将会失败. 其他类型的数据库,你也最好升级数据库相应的ODBC Driver到最新版本.

在使用存储过程之前必须设置数据库ODBC数据源. 你可以参考这里的设置步骤.

在本例中, 我们有一个表"account_info"在这个数据库里. 此表是其他数据库应用程序所使用, 它存储用户名, 口令和用户发表的文章数目(posts). 我们也创建了另一个表"acct_param_table", 它是Xlight FTP服务器中的一张数据库表, 用于存储用户参数. 我们没有创建Xlight FTP服务器的主要数据库表"acct_table ", 因为我们将使用存储过程模拟其功能.

account_info
Account Password Posts
test1 test1_password 20
test2 test2_password 120
test3 test3_password 300
acct_param_table
param_index max_down_speed
0 10
1 50
2 100

下面代码是范例MySQL存储过程test () ,它接受2个参数, username_in和password_in.

DELIMITER $$
DROP PROCEDURE IF EXISTS test $$
CREATE PROCEDURE test(username_in VARCHAR(65), password_in VARCHAR(65))
main: BEGIN
  DECLARE user_name VARCHAR(65);
  DECLARE home_path VARCHAR(255);
  DECLARE home_perm VARCHAR(10);
  DECLARE num_posts, param_index INT(10);

  SELECT `account`, `Posts`
    INTO user_name, num_posts
    FROM account_info
    WHERE account = username_in AND password = password_in;

  IF user_name != username_in THEN
    LEAVE main;
  END IF;

  SET home_perm = ‘LRS‘;

  IF num_posts > 100 THEN
    SET param_index = 1;
    SET home_path = ‘c:\\folder_1‘;
  ELSEIF num_posts > 200 THEN
    SET param_index = 2;
    SET home_path = ‘c:\\folder_2‘;
  ELSE
    SET param_index = 0;
    SET home_path = ‘c:\\folder_0‘;
  END IF;

  SELECT home_path,home_perm,param_index;

END $$
DELIMITER ;

存储过程test()接受明码文本口令的password_in参数. 你必须为虚拟服务器配置ODBC使用明码文本口令, 如下图所示


上面的存储过程test()将检查数据库account_info验证用户, 如果用户名或口令不符合, 将没有结果集返回Xlight FTP服务器,这个用户的验证将失败.

在成功的用户认证以后, 这个程序将根据用户在"account_info"表里发表的文章数目(posts), 返回不同的param_index, home_path值. 最终test()程序将用语句"SELECT home_path,home_perm,param_index;"返回结果集到Xlight FTP服务器.

因为test()程序替换"acct_table"的功能, 您应该放置"call test(‘$USER‘,‘$PASS‘);"在选项"替换第一条内部SQL查询语句"中,如下图所示.


$USER和$PASS是预定义参数, Xlight FTP服务期将用登录用户实际的用户名和密码自动替换它们. 如果需要查询支持的预定义参数, 请查阅帮助手册的[全局选项]->[高级]这一节.

如果您想要解决数据库查询的问题,你可以选择这个选项"记录SQL查询错误到系统错误日志",你将能在系统错误日志中看到SQL查询错误.


站长资讯网 做中国最丰富的资讯网站 沪ICP备05004089号