数据插入PHP中为null或空外键

时间:2017-07-19 03:11:50

标签: php mysql mysqli

我在PHP中有关于数据库和表单的查询:

我有以下用户

CREATE TABLE IF NOT EXISTS `login`.`usuarios` (
    `nombres` VARCHAR(30) NULL,
    `apellidos` VARCHAR(30) NULL,
    `cedula` VARCHAR(13) NOT NULL,
    `telefono` VARCHAR(15) NULL,
    `direccion` VARCHAR(45) NULL,
    `sexo` VARCHAR(10) NULL,
    `sesion_id` INT(10) NOT NULL,
    PRIMARY KEY (`cedula`),
    INDEX `fk_usuarios_sesion_idx` (`sesion_id` ASC),
    CONSTRAINT `fk_usuarios_sesion`
    FOREIGN KEY (`sesion_id`)
        REFERENCES `login`.`sesion` (`id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE)
ENGINE = InnoDB;

我有会话

CREATE TABLE IF NOT EXISTS `login`.`sesion` (
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `correo` VARCHAR(45) NULL,
    `usuario` VARCHAR(10) NULL,
    `password` VARCHAR(100) NULL,
    `last_session` DATETIME NULL,
    `activacion` INT NULL,
    `token` VARCHAR(40) NULL,
    `token_password` VARCHAR(100) NULL,
    `password_request` INT(11) NULL,
    `id_tipo` INT(11) NULL,
    `estatus` INT(2) NULL,
    PRIMARY KEY (`id`))
ENGINE = InnoDB;

它们彼此相关,从1到1.主会话密钥作为用户的外键。

在PHP中,我有一个表单供用户在我的系统上注册。所有东西都在表中​​正常插入,但我只有一个问题,因为如果在sesions表中ID是自动增量的,因为它本身就是外来的用户也没有被填充?

此时我已经在我的系统上注册了几个用户,并且所有内容都插入良好,但外键始终为空,它与会话中分配自动增量的编号无关。

要插入我,请按以下方式进行:

function registraUsuario($nombres, $apellidos, $cedula, $telefono, $direccion, $sexo){

    global $mysqli;

    $stmtr= $mysqli->prepare("INSERT INTO usuarios (nombres, apellidos, cedula, telefono, direccion, sexo) VALUES(?,?,?,?,?,?)");
    $stmtr->bind_param('ssssss', $nombres, $apellidos, $cedula, $telefono, $direccion, $sexo);

    if ($stmtr->execute()){
        return true;
    } else {
        return 0;
    }   

}

function registraSesion($email, $usuario, $pass_hash, $activo, $token, $tipo_usuario, $estatus){

    global $mysqli;

    $stmt = $mysqli->prepare("INSERT INTO sesion (correo, usuario, password, activacion, token, id_tipo, estatus) VALUES(?,?,?,?,?,?,?)");
    $stmt->bind_param('sssisii', $email, $usuario, $pass_hash, $activo, $token, $tipo_usuario, $estatus);

    if ($stmt->execute()){
        return $mysqli->insert_id;
    } else {
        return 0;   
    }   

}

另外我必须说我将外键设为NULL,因为如果我不把它设为NULL,那么只是为用户注册的数据(名称,姓氏,dni ..)没有注册...但如果我没有注册除了外键之外,所有内容都没有任何不便之处。

如果你能帮我解决这个问题,或者你可以告诉我我该怎么做或我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果只谈论代码,我认为你必须先注册会话,然后获取会话ID,然后注册用户。

但是对于传统思维,session表应该有user表中的外键,但不是相反。