如下, 谢谢!-- /**
--  * this is a SP of dengx.blog_user table. 
--  * table structure: blog_user(uid, account, password, key, lastime) 
--  */DELIMITER //DROP FUNCTION IF EXISTS dengx.user_register;CREATE FUNCTION dengx.user_register(
  user_account,varchar(50),
  user_password,varchar(50),
  user_key,int(5),
  user_lastime,int(10)
)RETURNS int(100)BEGIN
    DECLARE user_old_id int default 0;
    DECLARE user_new_id int(100);
    SELECT uid INTO user_has_id FROM blog_user WHERE account = user_account ;    IF NOT user_old_id THEN
        INSERT INTO blog_user(account,password,key,lastime)VALUES(user_account,user_password,user_key,user_lastime);
        SELECT LAST_INSERT_ID() INTO user_new_id;
        RETURN user_new_id;
    END IF;
    RETURN 0;
END;//DELIMITER;

解决方案 »

  1.   

    写在一个sql文件里, 用phpmyadmin导入 ,  还有直接在phpmyadmin, 把sql帖进去. 点查询
      

  2.   

    你直接用mysql.exe 命令工具试一下呢?
      

  3.   


    这个工具一点开就关了, 不知道什么回事, 平时创建表也是用phpmyadmin导入的, 用这个导入应该没问题, 我怀疑是不是代码写错在那里
      

  4.   


    先进行WINDOWS的命令行,(也就是俗称的DOS),然后用命令 mysql -uroot -pxxxx
      

  5.   

    后来我发现代码真有点错误, 但改后还是导入不了, httpd.exe进程占用cpu100%功能意思是, 一个用户注册, 查找有没相同的名字, 有则返回0, 没就注册返回注册的ID
    DELIMITER //DROP FUNCTION IF EXISTS dengx.user_register;CREATE FUNCTION dengx.user_register(
      user_account,varchar(50),
      user_password,varchar(50),
      user_key,int(5),
      user_lastime,int(10)
    )RETURNS int(100)BEGIN
        DECLARE user_old_id int default 0;
        DECLARE user_new_id int(100);
        SELECT uid INTO user_old_id FROM blog_user WHERE account = user_account ;    IF NOT user_old_id THEN
            INSERT INTO blog_user(account,password,key,lastime)VALUES(user_account,user_password,user_key,user_lastime);
            SELECT LAST_INSERT_ID() INTO user_new_id;
            RETURN user_new_id;
        END IF;
        RETURN 0;
    END;//DELIMITER;
      

  6.   

    判断问题,一般是用逐段排除。先确认你的MYSQL没有问题。所以请先直接到mysql的工具中做一下测试。以断定问题在mysql 还是 phpadmin.
      

  7.   


    DELIMITER //DROP FUNCTION IF EXISTS dengx.user_register;CREATE FUNCTION dengx.user_register(
      user_account varchar(50),
      user_password varchar(50),
      user_key int(5),
      user_lastime int(10)
    )RETURNS intBEGIN
        DECLARE user_old_id int default 0;
        DECLARE user_new_id int;
        SELECT uid INTO user_old_id FROM blog_user WHERE account = user_account ;    IF user_old_id != 0 THEN
            INSERT INTO blog_user(account,password,ukey,lastime) VALUES(user_account,user_password,user_key,user_lastime);
            SELECT LAST_INSERT_ID() INTO user_new_id;
            RETURN user_new_id;
        END IF;
        RETURN 0;
    END;
    //
    DELIMITER ;修改了一下,试一下看能不能运行。
      

  8.   


    INSERT INTO blog_user(account,password,ukey,lastime) VALUES(user_account,user_password,user_key,user_lastime);上面这条语句的ukey改成key,不知道你怎么能用key做字段名的,key是关键字。
      

  9.   

    我把表的key改成了salt, 不知道这里的key也是关键词, 之后出现如下错误ErrorSQL query:CREATE FUNCTION dengx. 'user_register'(
    user_account varchar( 50 ) ,
    user_password varchar( 50 ) ,
    user_key int( 5 ) ,
    user_lastime int( 10 )
    ) RETURNS int BEGIN DECLARE user_old_id int( 100 ) default 0;MySQL said: Documentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''user_register'(
      user_account varchar(50),
      user_password varchar(50),
      u' at line 1 
      

  10.   


    用你的代码粘贴, 报错#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE FUNCTION dengx.user_register( user_account varchar(50), user_passwo' at line 3
      

  11.   

    DELIMITER //DROP FUNCTION IF EXISTS csdn.user_register;CREATE FUNCTION csdn.user_register(
      user_account varchar(50),
      user_password varchar(50),
      user_key int(5),
      user_lasttime int(10)
    )RETURNS intBEGIN
        DECLARE user_old_id int default 0;
        DECLARE user_new_id int default 0;
        SELECT uid INTO user_old_id FROM blog_user WHERE account = user_account ;    IF user_old_id = 0 THEN
            INSERT INTO blog_user(account,password,salt,lastime) VALUES(user_account,user_password,user_key,user_lasttime);
            SELECT LAST_INSERT_ID() INTO user_new_id;
            RETURN user_new_id;
        END IF;
        RETURN 0;
    END;
    //
    DELIMITER ;
    mysql> select * from blog_user;
    +------+---------+-----------+------+------------+
    | uid  | account | password  | ukey | lasttime   |
    +------+---------+-----------+------+------------+
    |    1 |     200 | zhoupuyue | key  | 2009-08-24 |
    |    2 |     530 | csdn      | csdn | 2009-05-14 |
    +------+---------+-----------+------+------------+
    2 rows in set (0.00 sec)mysql>  select user_register('200','csdn1','csdn','2007-04-25');
    +--------------------------------------------------+
    | user_register('200','csdn1','csdn','2007-04-25') |
    +--------------------------------------------------+
    |                                                0 |
    +--------------------------------------------------+
    1 row in set, 2 warnings (0.00 sec)
      

  12.   

    用15楼的代码, 改了数据库运行, 得到这个错误,    第九行那里有错啊, 天杀~~~ErrorSQL query:CREATE FUNCTION dengx.user_register(
    user_account varchar( 50 ) ,
    user_password varchar( 50 ) ,
    user_key int( 5 ) ,
    user_lasttime int( 10 )
    ) RETURNS int BEGIN DECLARE user_old_id int default 0;MySQL said: Documentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 9 
      

  13.   

    CREATE TABLE IF NOT EXISTS `blog_user` (
      `uid` int(100) NOT NULL AUTO_INCREMENT,
      `account` varchar(50) NOT NULL,
      `password` varchar(50) NOT NULL,
      `salt` int(5) NOT NULL,
      `lastime` int(10) NOT NULL,
      PRIMARY KEY (`uid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
      

  14.   

    那个lastime改了, 但还是报第九行有错, 
      

  15.   


    贴出你的create table 语句和 create function 语句,还有你的mysql 版本。
      

  16.   

    吐血,  最后发现, 原来phpmyadmin和mysql.exe里的储存过程写法不一样
      

  17.   

    -- 表
    CREATE TABLE IF NOT EXISTS `blog_user` (
      `uid` int(100) NOT NULL AUTO_INCREMENT,
      `account` varchar(50) NOT NULL,
      `password` varchar(50) NOT NULL,
      `salt` int(5) NOT NULL,
      `lastime` int(10) NOT NULL,
      PRIMARY KEY (`uid`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;-- 储存过程
    DELIMITER //DROP FUNCTION IF EXISTS dengx.user_register;CREATE FUNCTION dengx.user_register(
      user_account varchar(50),
      user_password varchar(50),
      user_salt int(5),
      user_lastime int(10)
    )RETURNS intBEGIN
        DECLARE user_old_id int default 0;
        DECLARE user_new_id int default 0;
        SELECT uid INTO user_old_id FROM blog_user WHERE account = user_account ;    IF user_old_id = 0 THEN
            INSERT INTO blog_user(account,password,salt,lastime) VALUES(user_account,user_password,user_salt,user_lastime);
            SELECT LAST_INSERT_ID() INTO user_new_id;
            RETURN user_new_id;
        END IF;
        RETURN 0;
    END;
    //
    DELIMITER ;
    版本
     mysql: Server version: 5.1.29
    phpmyadmin: Version information: 3.0.1.1
      

  18.   


    后来我测试了一下
    create procedure dengx.test() 
      begin
    select * from dengx.blog_category
      end ;
    --错误create procedure dengx.test() select * from dengx.blog_category--正常
      

  19.   

    上面的创建函数语句在mysql命令行能运行吗?
      

  20.   

    用你的代码测试,没有什么问题,只是改了一个地方。
    DROP FUNCTION IF EXISTS user_register//建议你也同样,到mysql的命令工具下进行测试,这样看得比较清楚。
    mysql> CREATE TABLE IF NOT EXISTS `blog_user` (
        ->   `uid` int(100) NOT NULL AUTO_INCREMENT,
        ->   `account` varchar(50) NOT NULL,
        ->   `password` varchar(50) NOT NULL,
        ->   `salt` int(5) NOT NULL,
        ->   `lastime` int(10) NOT NULL,
        ->   PRIMARY KEY (`uid`)
        -> );
    Query OK, 0 rows affected (0.08 sec)mysql> set global log_bin_trust_function_creators=ON;
    Query OK, 0 rows affected (0.00 sec)mysql> select @@log_bin_trust_function_creators;
    +-----------------------------------+
    | @@log_bin_trust_function_creators |
    +-----------------------------------+
    |                                 1 |
    +-----------------------------------+
    1 row in set (0.00 sec)mysql> DELIMITER //
    mysql>
    mysql> DROP FUNCTION IF EXISTS user_register//
    Query OK, 0 rows affected, 1 warning (0.00 sec)mysql>
    mysql> CREATE FUNCTION user_register(
        ->   user_account varchar(50),
        ->   user_password varchar(50),
        ->   user_salt int(5),
        ->   user_lastime int(10)
        -> )RETURNS int
        ->
        -> BEGIN
        ->     DECLARE user_old_id int default 0;
        ->     DECLARE user_new_id int default 0;
        ->     SELECT uid INTO user_old_id FROM blog_user WHERE account = user_account ;
        ->
        ->     IF user_old_id = 0 THEN
        ->         INSERT INTO blog_user(account,password,salt,lastime) VALUES(user_account,user_password,user_salt,user_lastime);
        ->         SELECT LAST_INSERT_ID() INTO user_new_id;
        ->         RETURN user_new_id;
        ->     END IF;
        ->     RETURN 0;
        -> END;
        -> //
    Query OK, 0 rows affected (0.00 sec)mysql> DELIMITER ;
    mysql>
    mysql> select version();
    +----------------------+
    | version()            |
    +----------------------+
    | 5.1.33-community-log |
    +----------------------+
    1 row in set (0.00 sec)mysql>
      

  21.   

    to F26,能, 绝对的. 
      

  22.   

    to F27用了mysql测试正常 , 但服务器空间上不能用mysql的, 可以是phpmyadmin, 有没有其它办法, 导入不报错的呢 
      

  23.   

    phpmyadmin, 试一下。create procedure sp_test()
    begin
    select now();
    select 'aaa';
    end 不加 delimiter
      

  24.   


    错误, 不要begin end关键字就对
      

  25.   

    我的phpmyadmin已经是3.0.1.1,  差不多是最高版了
      

  26.   

    在PHPmyadmin中,我们不能用 "delimiter //" 来指定分隔符,而应当在SQl窗口中手工把 ";" 改为 "//" ,要不我们总是会得到建立存储过程错误的信息——如果你的存储过程用";"来分隔的话。
      

  27.   

    按同样的方法,  把那个function的begin end去掉, 因为, function后有个returns int 结果给连到下面的定义declare去了, 所以会报错, 如果用; 分隔开, 又没这样的语法
      

  28.   

    你需要在 phpmyadmin 中设置这个 delimiter 而不是通过命令传给它
      

  29.   

    在phpMyAdmin中执行时,在Delimiter文本框中填写 //
      

  30.   


    是的, 在phpmyadmin中, 可以不要"delimiter //" 这个, 而且里面只用" ; " 作为分隔符,但是phpmyadmin好像不支持"begin, end"语法 , 而导至这个问题出错的原因
      

  31.   


    不是不要 //,而是你要在PHPMYADMIN的设置中将 delimiter 改成 // ,否则它还是会以为 ; 为提交符。
      

  32.   

    在你的操作界面上找一下,应该有个设置 delimiter 的地方。
      

  33.   

    In the "Run SQL query/queries on database" form, change the Delimiter to //. (Located in a small box at the bottom of the form) 
    底部的一个小框内。
      

  34.   


    是有个Delimiter ; 的东西 , 把它改成了 //   接着怎么样 .... .... 代码都是报错
      

  35.   

    试下这个
    create procedure sp_test()
    begin
        select now();
        select 'aaa';
    end //
      

  36.   

    把文本框里的" ; " 改成了 " // "这段代码要改那里才不报错DROP FUNCTION IF EXISTS dengx.user_register;CREATE FUNCTION dengx.user_register(
      user_account varchar(50),
      user_password varchar(50),
      user_salt int(5),
      user_lastime int(10)
    )RETURNS intBEGIN
        DECLARE user_old_id int default 0;
        DECLARE user_new_id int default 0;
        SELECT uid INTO user_old_id FROM dengx.blog_user WHERE account = user_account ;    IF user_old_id = 0 THEN
            INSERT INTO dengx.blog_user(account,password,salt,lastime) VALUES(user_account,user_password,user_salt,user_lastime);
            SELECT LAST_INSERT_ID() INTO user_new_id;
            RETURN user_new_id;
        END IF;
        RETURN 0;
    END;
      

  37.   

    DROP FUNCTION IF EXISTS user_register//CREATE FUNCTION user_register(
      user_account varchar(50),
      user_password varchar(50),
      user_salt int(5),
      user_lastime int(10)
    )RETURNS intBEGIN
        DECLARE user_old_id int default 0;
        DECLARE user_new_id int default 0;
        SELECT uid INTO user_old_id FROM dengx.blog_user WHERE account = user_account ;    IF user_old_id = 0 THEN
            INSERT INTO dengx.blog_user(account,password,salt,lastime) VALUES(user_account,user_password,user_salt,user_lastime);
            SELECT LAST_INSERT_ID() INTO user_new_id;
            RETURN user_new_id;
        END IF;
        RETURN 0;
    END //
      

  38.   


    非常感谢acmain和zhoupuyue当了我一回MYSQL的SP入门老师 
      

  39.   

    总结: 1  变量名不能为关键字, 初次接触不熟悉
     2  phpmyadmin里提交sql, 要把提交符" ; " 改成 " // " ,  不同语句要分开提交.
         (例如, drop, create等)