【问题标题】:Error Code: 1064 in mysql错误代码:mysql中的1064
【发布时间】:2017-02-19 12:58:01
【问题描述】:

我创建了一个应该做一些操作的过程,但是每次我调用它时,mysql都会出现一个错误,我不知道它是什么意思。我试图理解它是徒劳的,这是存储过程对其进行操作的表结构:

CREATE  TABLE `recruitment`.`job_seeker` (
    `user_id` INT Null ,
    `fname` VARCHAR(45) Null ,
    `lname` VARCHAR(45) Null ,
    `mname` VARCHAR(45) Null ,
    `gender` VARCHAR(10) Null ,
    `dob` DATE Null ,
    `marital_status` VARCHAR(45) Null ,
    `address` VARCHAR(45) Null ,
    `city` VARCHAR(45) Null ,
    `nationality` VARCHAR(45) Null ,
    `phone` VARCHAR(45) Null ,
    `mobile` VARCHAR(45) Null ,
    `degree_id` INT Null ,
    `education` VARCHAR(100) Null ,
    `experience` VARCHAR(250) Null ,
    `other` VARCHAR(250) Null ,
    `job_target` VARCHAR(250) Null ,
    PRIMARY KEY (`user_id`) ,
    INDEX `user_id` (`user_id` ASC) ,
    INDEX `degree_id` (`degree_id` ASC) ,
    CONSTRAINT `user_id`
    FOREIGN KEY (`user_id` )
    REFERENCES `recruitment`.`user_authentication` (`user_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
    CONSTRAINT `degree_id`
    FOREIGN KEY (`degree_id` )
    REFERENCES `recruitment`.`degree` (`degree_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION
);

这是存储过程:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `createSeekerProfile`(in userName varchar(45),
    in fn varchar(45),in mn varchar(45), in ln varchar(45),
    in gender varchar(6),in nationality varchar(45),
    in ad varchar(45),in city varchar(45),in phone varchar(15),in mob varchar(15),

    in   maritalStatus varchar(45), in degId int, in educ varchar(100),
    in exper varchar(250), in other   varchar(250),
    in dob date,in jtarg varchar(250))
    begin
    declare returned_ID int;
    set @dyn_que = CONCAT('select user_id into @returned_ID
    from user_authentication where user_name =  ? ');
    prepare s1 from @dyn_que ;
set @usn = userName;
execute s1 using @usn ;

set @dyn_update =CONCAT('update job_seeker set fname =',fn,', lname = ',ln,' ,mname = ',mn,' ,
nationality =',nationality,',address =',ad,',city =',city,',phone=',phone,',
mobile =',mob,', gender = ',gender,',other =',other,',
degree_id =',degId,', job_target=',jtarg,', dob =',dob,', education =',educ,',
experience=',exper,', marital_status=',maritalStatus,' where user_id =@returned_ID');
prepare s2 from @dyn_update;
execute s2;
end

每当我通过以下方式调用程序时:

call createSeekerProfile('realsilhouette','robert','marie','david','male'
,'earthal','an address here','capital of earth','012178152',
'1111111111','single',2,'engineering','looking forward','determined',
'2008-7-04','Oracle CEO')

我收到一个可怕的错误:

Error Code: 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 'address here,
city =capital of earth,phone=012178152,
mobile =1111111111, gender' at line 2

但是,当我尝试手动执行存储过程中的更新语句时,效果很好。

新帖子: 感谢大神,终于解决了问题,问题归结为顺序,我所做的只是按顺序排列参数,虽然更新语句不关心顺序,据我所知,我不确定, 但我确信存储过程创建得很漂亮,这是新代码:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `createSeekerProfile`(
in un varchar(45),
in fn varchar(45),
in ln varchar(45), 
in mn varchar(45),
in g varchar(10),
in dateOfBirth date,
in ms varchar(45),
in ad varchar(45),
in city varchar(45),
in nat varchar(45),
in ph varchar(45),
in mob varchar(45),
in degid int,
in educ varchar(100),
in exp varchar(250),
in other varchar(250),
in jtarg varchar(250))
begin

declare returned_ID int(11);

 set @dyn_que = CONCAT('select user_id into @returned_ID from user_authentication
 where user_name =  ? ');
 prepare s1 from @dyn_que ;
 set @usn = un;
 execute s1 using @usn ;


 set @dyn_update =CONCAT('update job_seeker set fname  
 ="',fn,'",lname="',ln,'",mname="',mn,'",lname ="',ln,'",
 gender ="',g,'",dob="',dateOfBirth,'",marital_status="',ms,'",
 address="',ad,'",city="',city,'",
 nationality="',nat,'",phone="',ph,'",mobile="',mob,'",degree_id="',
 degid,'",education="',educ,'",
 experience="',exp,'",other="',other,'",job_target="',jtarg,'" 
 where user_id = @returned_ID');
 prepare stm from @dyn_update;
 execute stm;
 end $$

非常感谢

【问题讨论】:

    标签: mysql mysql-error-1064


    【解决方案1】:

    您忘记引用字符串值了。

    例如:

    concat('update yourTable
    set address ="',  @address, '" 
    where id = 1');
    

    或使用函数quote

    【讨论】:

    • 但是我用这种方式创建了几个存储过程,毕竟我按照你告诉我的那样改变了它,我得到了新的错误:Error Code: 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 'NULL' at line 1
    • 嗯...这是调试动态查询的一种非常好的方法。 1)评论执行/准备 2)执行“选择@your_query” 3)执行存储过程并获得结果查询 4)执行查询并查看您的查询。在这种情况下,您会收到错误,因为某些输入参数为空。请按照我的步骤。
    • 我已按照您的所有步骤操作,错误仍然存​​在,谢谢。
    • 当然是……你应该避免任何类型的“field=NULL”。您应该跳过包括concat 函数条件(如if @variable is not null then @stmt = concat(@stmt, ' AND yourfield = "', @variable, '"'))中的NULL 值。尝试分别为每个变量构建动态查询,然后加入它们。
    • 好保存,我一直在盯着同一个问题一段时间。谢谢。
    【解决方案2】:

    对我来说,添加字符 ` (GRAVE ACCENT) 很有帮助。它不是单引号 (')

    【讨论】:

      【解决方案3】:
      CREATE TABLE Order
      ( 
          Order_Id             integer  NOT NULL ,
          Order_Time           datetime  NULL ,
          Order_Status         char(50)  NULL ,
          Customer_Id          integer  NOT NULL 
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-21
        • 2019-05-17
        • 1970-01-01
        • 1970-01-01
        • 2014-05-16
        • 2021-03-05
        • 2021-04-15
        • 2020-06-28
        相关资源
        最近更新 更多