gpt4 book ai didi

mysql - 将 NULL 传递给 mysql 过程

转载 作者:行者123 更新时间:2023-11-30 23:36:38 24 4
gpt4 key购买 nike

我有以下 mysql 程序:

CREATE PROCEDURE db.processEvent( IN eventId INT , IN creatorId INT , IN typeId INT , IN eventName VARCHAR( 60 ) , IN startDateTime DATETIME , IN endDateTime DATETIME , IN validStartTime TIME , IN validEndTime TIME )
BEGIN
INSERT INTO tbl_event
VALUES
(
eventId , creatorId , typeId , eventName , startDateTime , endDateTime , validStartTime , validEndTime
)
ON DUPLICATE KEY UPDATE
creator_user_id = creatorID ,
event_type_id = typeId ,
event_name = eventName ,
start_date = startDateTime ,
end_date = endDateTime ,
valid_time_start = validStartTime ,
valid_time_end = validEndTime
;
END;

ON 第一次运行它会做正确的事情并在我将 NULL 传递给 eventId 时创建一个新记录。当我为 eventId 传递一个 id 时它也会更新(我假设它在这个阶段正确更新)。

但是...如果我通过将 NULL 传递给 eventId 来创建新记录,则会更新初始记录。

我试过添加:

    IF eventId != 0 OR eventId IS NOT NULL THEN
set eID = eventId;
END IF;

并在值列表中使用 eID 但无济于事。

任何线索都会有很大的帮助。

谢谢大家。

==========================

请求的信息:

表结构:

CREATE TABLE `tbl_event` (
`event_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`creator_user_id` int(10) unsigned NOT NULL,
`event_type_id` int(11) NOT NULL,
`event_name` varchar(60) DEFAULT NULL,
`start_date` datetime DEFAULT NULL,
`end_date` datetime DEFAULT NULL,
`valid_time_start` time DEFAULT NULL,
`valid_time_end` time DEFAULT NULL,
PRIMARY KEY (`event_id`,`creator_user_id`),
UNIQUE KEY `event_id_UNIQUE` (`event_id`),
UNIQUE KEY `creator_user_id_UNIQUE` (`creator_user_id`),
KEY `fk_tbl_event_tbl_cm_profile1` (`creator_user_id`),
KEY `fk_tbl_event_tbl_event_type1` (`event_type_id`),
CONSTRAINT `fk_tbl_event_tbl_cm_profile1` FOREIGN KEY (`creator_user_id`) REFERENCES `tbl_cm_user_profile` (`cm_user_id`),
CONSTRAINT `fk_tbl_event_tbl_event_type1` FOREIGN KEY (`event_type_id`) REFERENCES `tbl_event_type` (`event_type_id`)
) ENGINE=InnoDB

像这样通过 php:pdo 调用:

$db     = \lib\DBObj::getInstance( DBUSE );
$prEvnt = $db->prepare( 'CALL processEvent(:id , :creator , :type , :name , :startDate , :endDate , :startTime , :endTime );' );

$prEvnt->bindValue( ':id' , $event_id , \PDO::PARAM_INT || \PDO::PARAM_NULL );
$prEvnt->bindValue( ':creator' , $usr->getId() , \PDO::PARAM_INT );
$prEvnt->bindValue( ':type' , $event_type , \PDO::PARAM_INT );
$prEvnt->bindValue( ':name' , $event_name , \PDO::PARAM_INT );
$prEvnt->bindValue( ':startDate' , $start_date , \PDO::PARAM_STR );
$prEvnt->bindValue( ':endDate' , $end_date , \PDO::PARAM_STR );
$prEvnt->bindValue( ':startTime' , $start_time , \PDO::PARAM_STR || \PDO::PARAM_NULL );
$prEvnt->bindValue( ':endTime' , $end_time , \PDO::PARAM_STR || \PDO::PARAM_NULL );
$prEvnt->execute();

最佳答案

哦,亲爱的 - 我刚刚注意到主键和引用!!!

从主键中删除了 creator_id 以及对事件类型的标识引用 - 现在一切都很好......

关于mysql - 将 NULL 传递给 mysql 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6829107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com