2017-07-19 64 views
-1

我有關於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.主會話密鑰是作爲外鍵我n個用戶。

在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 ..)沒有註冊......但是如果註冊沒有任何不便之處,除了外鍵以外,其值爲NULL。

請問,如果你能幫助我解決這個問題,或者你能告訴我我該怎麼做或者我做錯了什麼?

+0

你在哪裏嘗試用會話ID更新用戶表? – Shadow

+0

通過發佈更新聲明... – Shadow

+0

@Shadow 這就是我想要做的 我想知道我是如何做的,以便在用戶表中的外部sesion_id根據它作爲主要的ID進行更新在桌面上鍵入。 – rodrigo2324

回答

1

如果只是談論代碼,我認爲你必須先註冊會話,然後獲取會話ID,然後註冊用戶。

但是對於傳統思維,session表應該有user表的外鍵,但不是相反。

+0

我只是在評論中說了同樣的事情,關於會話是從屬表。我也這麼認爲,似乎很奇怪,否則。 – ArtisticPhoenix

+0

我認爲這是真實的 - 用戶可以存在沒有會話,但可以存在沒有用戶的會話。鑑於此,永遠不會有空的ID擔心。 – ArtisticPhoenix

+0

但它仍然是相同的,因爲如果我將用戶的主鍵傳遞給會話表,則相同的值爲空。我的查詢重點是如何使外鍵被填充?我不知道如何編寫句子 – rodrigo2324