Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误代码:mysql中的1064_Mysql_Mysql Error 1064 - Fatal编程技术网

错误代码:mysql中的1064

错误代码:mysql中的1064,mysql,mysql-error-1064,Mysql,Mysql Error 1064,我创建了一个应该执行一些操作的过程,但每次调用它时,mysql都会出现一个错误,我不知道这是什么意思。我试图理解它,但徒劳无功,下面是存储过程用来对其执行操作的表结构: CREATE TABLE `recruitment`.`job_seeker` ( `user_id` INT Null , `fname` VARCHAR(45) Null , `lname` VARCHAR(45) Null , `mname` VARCHAR(45) Null ,

我创建了一个应该执行一些操作的过程,但每次调用它时,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
但是,当我尝试手动执行存储过程中的update语句时,效果非常好

新员额: 谢天谢地,我终于解决了问题,问题归结到顺序上,我所做的只是按顺序设置参数,虽然update语句并不关心顺序,但据我所知,我不确定,但我确定的是存储过程创建得很漂亮,下面是新代码:

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 $$

非常感谢您忘记了引用字符串值

例如:

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

或者使用函数

为我添加字符`(严重口音)有帮助。它不是一个单引号(')

但是我用这种方式创建了几个存储过程,毕竟我按照您告诉我的那样修改了它,我得到了新的错误:
错误代码:1064您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第1行中接近“NULL”的正确语法。。。下面是调试动态查询的一种非常好的方法。1) 注释执行/准备2)执行“select@your_query”3)执行存储过程并获得结果查询4)执行查询并查看查询。在本例中,由于某些输入参数为null,因此出现了错误。请按照我的步骤操作。我已经按照您的步骤操作,错误仍然存在,谢谢。当然是。。。您应该避免任何类型的“field=NULL”。您应该跳过空值,包括
concat
函数条件中的空值,如
如果@variable不为空,则@stmt=concat(@stmt',和yourfield=“”,@variable“”)
。尝试分别为每个变量构造动态查询,并在之后加入它们。保存得好,我已经关注同一问题有一段时间了。非常感谢。
CREATE TABLE Order
( 
    Order_Id             integer  NOT NULL ,
    Order_Time           datetime  NULL ,
    Order_Status         char(50)  NULL ,
    Customer_Id          integer  NOT NULL 
)