Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
将NULL传递给mysql过程_Mysql_Stored Procedures - Fatal编程技术网

将NULL传递给mysql过程

将NULL传递给mysql过程,mysql,stored-procedures,Mysql,Stored Procedures,我有以下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 INT

我有以下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;
在第一次运行时,它做了正确的事情,并在我将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和事件类型的标识引用-现在一切正常…

请提供一个表定义和一些SP调用示例。我已编辑了OP并添加了信息。谢谢@Devart。你为什么在A!=0或A不为空?这个表达式的第一部分,A!=0在这里永远不会有用,是吗?除了如果A为NULL,则该比较也将产生NULL,因此整个表达式也将为NULL。@Lasse-我进行了检查,并将eventId的值赋给了outvar,outvar返回0。所以我只是试着用猎枪的方式看看我能不能在询问前抓住它。据我所知,这里不需要任何if语句-如果传递NULL,我会假设它在查询中被用作NULL…好的,那么我不知道,我找不到文档说明如果为复合键的非NULL自动递增列部分传递NULL会发生什么。