【问题标题】:Insert INTO with 3 tables用 3 个表插入 INTO
【发布时间】:2018-06-21 11:23:28
【问题描述】:
 $sql3 = "INSERT INTO users_addresses (ua_user_id,ua_address_id) VALUES ('','')";

我是 php 新手,我的提示是将 2 个表 id 链接到另一个名为 users_addresses 的表中。当用户在我的数据库中注册时,我希望将 user_id 和 address_id 克隆到 users_addresses(ua_user_id,ua_address_id)

My tables

$sql = "INSERT INTO users (user_fname,user_mname,user_lname,user_login,user_email,user_phone) 
            VALUES ('{$_SESSION['userinfo']['fname']}', '{$_SESSION['userinfo']['mname']}', '{$_SESSION['userinfo']['lname']}', '{$_SESSION['userinfo']['login']}', '{$_SESSION['userinfo']['email']}', '{$_SESSION['userinfo']['phone']}')";
    $sql1 = "INSERT INTO addresses (address_line_1,address_line_2,address_zip,address_city,address_province,address_country) 
            VALUES ('{$_SESSION['addressinfo']['adr1']}', '{$_SESSION['addressinfo']['adr2']}', '{$_SESSION['addressinfo']['zip']}', '{$_SESSION['addressinfo']['city']}', '{$_SESSION['addressinfo']['provinciq']}', '{$_SESSION['addressinfo']['durjava']}')"; 
    $sql2 = "INSERT INTO notes (note_text) 
            VALUES ('{$_SESSION['noteinfo']['note']}')";

这些是我在数据库中添加会话数据的其他 SQL 代码。

【问题讨论】:

标签: php sql


【解决方案1】:

只需要从第一个 sql 中获取 user_id。如果您使用的是 mysqli 函数,请执行此操作

// run your first sql: insert user
mysqli_query($con, $sql);
$user_id = mysqli_insert_id($con); // or mysqli::$insert_id 

接下来,您有带有用户 ID 的 $user_id 变量。

$sql1 = "INSERT INTO addresses (address_line_1,address_line_2,address_zip,address_city,address_province,address_country) 
        VALUES ($'{$_SESSION['addressinfo']['adr1']}', '{$_SESSION['addressinfo']['adr2']}', '{$_SESSION['addressinfo']['zip']}', '{$_SESSION['addressinfo']['city']}', '{$_SESSION['addressinfo']['provinciq']}', '{$_SESSION['addressinfo']['durjava']}')"; 
mysqli_query($con, $sql);
$address_id = mysqli_insert_id($con); // or mysqli::$insert_id 

$sql3 = "INSERT INTO users_addresses (ua_user_id, ua_address_id) VALUES ($user_id, $address_id)";
mysqli_query($con, $sql);

【讨论】:

  • 你需要数据库连接..$user_id = mysqli_insert_id($conn);
  • 我认为$sql2 声明也不正确。 OP 想要users_addresses 表中的$user_id$address_id,而不是notes
  • 因为如果你简单的复制和粘贴这个答案是不正确的。 @pablorsk 更改了您的 INSERT 语句。
  • 是的,我希望他们在 users_addresses 中
  • 好的,我修正了这个例子。然后你插入用户和地址,接下来你需要在 users_addresses 上插入两个 id,对吧?
【解决方案2】:

使用mysqli_insert_id()获取插入表的唯一ID,本例使用Procedural风格:

<?php
include 'connection.php';
......
$InsertSQL =    "INSERT INTO users (user_fname,user_mname,user_lname,user_login,user_email,user_phone) 
                VALUES ('{$_SESSION['userinfo']['fname']}',
                        '{$_SESSION['userinfo']['mname']}',
                        '{$_SESSION['userinfo']['lname']}',
                        '{$_SESSION['userinfo']['login']}',
                        '{$_SESSION['userinfo']['email']}',
                        '{$_SESSION['userinfo']['phone']}')";
$ResultSQL = mysqli_query($conn, $InsertSQL) or die(mysqli_error($conn)); // <-- execute your query
$UserID = mysqli_insert_id($conn); // <-- get the UserID

$InsertSQL =    "INSERT INTO addresses (address_line_1,address_line_2,address_zip,address_city,address_province,address_country) 
                VALUES ('{$_SESSION['addressinfo']['adr1']}',
                        '{$_SESSION['addressinfo']['adr2']}',
                        '{$_SESSION['addressinfo']['zip']}',
                        '{$_SESSION['addressinfo']['city']}',
                        '{$_SESSION['addressinfo']['provinciq']}',
                        '{$_SESSION['addressinfo']['durjava']}')"; 
$ResultSQL = mysqli_query($conn, $InsertSQL) or die(mysqli_error($conn)); // <-- execute your query
$AddressID = mysqli_insert_id($conn); // <-- get the AddressID

$InsertSQL =    "INSERT INTO user_addresses (ua_user_id,ua_address_id) 
                VALUES ($UserID,$AddressID)"; // <-- INSERT INTO user_address
$ResultSQL = mysqli_query($conn, $InsertSQL) or die(mysqli_error($conn)); // <-- execute your query
?>

您还应该查看 SQL 注入漏洞,查看prepared statements

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2016-10-25
    • 2017-06-14
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多