簡體   English   中英

PHP MySQLi准備的語句未將數據插入表中

[英]PHP MySQLi prepared statement not inserting data into table

我正在設計一個具有用戶登錄名和通過電子郵件驗證進行注冊的網站,當用戶注冊一個帳戶時,它將成功正確地將用戶記錄插入“用戶”表中的數據庫。

但是,當我嘗試拉出插入時創建的用戶ID並將用戶ID插入到該網站所有成員的花名冊的第二個表中(這是針對游戲氏族的)時,它將用戶名插入0 ,無論其ID在該用戶的“用戶”表上是什么。

這是我的代碼:

if($insert_stmt = $db->prepare("INSERT INTO users (username, password, email, date, actcode) VALUES (?, ?, ?, ?, ?)"))
    {
        $insert_stmt->bind_param('sssss', $username, $password, $email, $date, $actcode);

        $stmt = $db->prepare("SELECT id FROM users WHERE email = ?");
        if($stmt)
        {
            $stmt->bind_param('s', $email);
            $stmt->execute();
            $stmt->fetch();
            $stmt->store_result();
            $stmt->bind_result($ui);
        }

        $stmt = $db->prepare("INSERT INTO roster (userid, joindate) VALUES (?, ?)");
        if($stmt)
        {
            $stmt->bind_param('ss', $ui, $date);
            $stmt->execute();
        }

        if(!$insert_stmt->execute()) {
            header('Location: error.php?err=Registration failure: INSERT');
        }
    }

出於安全原因,我保留了某些變量和代碼部分,這些部分對該部分沒有任何影響,這讓我很頭疼。

我無法弄清楚為什么它沒有將來自該用戶帳戶的“用戶”中新創建的“ id”插入“ userid”列下的“名冊”表中。

另外,為了測試一些東西,我還去設置了會話變量

$_SESSION['uid'] = $ui;

行后直接

$stmt->store_result($ui);

並將其回顯到我的index.php文件中,該會話變量也顯示為0。

您可以簡單地使用以下函數: mysqli :: $ insert_id,而不用編寫第二個查詢。

替換此行:

$stmt = $db->prepare("SELECT id FROM users WHERE email = ?");

帶有:

$userid = $db->insert_id; 

讓我知道這個是否奏效。

仍然無法使其與提供的解決方案一起使用,而是決定將所有內容合並到users表中,從而解決了該問題。 至於檢查它是否正在執行,我正在進行一些檢查以確保它能夠通過。 感謝您的幫助和建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM