【问题标题】:How to fix the inserting data into the second table如何修复插入数据到第二个表
【发布时间】:2019-06-09 06:01:11
【问题描述】:

我正在尝试根据创建的第一个表UserID(自动增量)将相同的数据插入到第二个表中。

我创建了一个 INSERT 查询,它将用户注册数据插入到users_tb 表中。它成功地工作。然后我需要根据users_tb中的UserID,将描述数据的地址插入address_tb表中。但不幸的是,它不起作用。

//Rady to insert:
$results = $Street. ", " .$Apt. ", " .$City. ", " .$State. ", " .$ZipCode. ", " .$Country; 
$query = mysql_query("INSERT INTO users_tb (UserId , FirstName , LastName , Email , Username , Password , Street , Apt , City , State , ZipCode , Country , Address , HomePhone , MobilePhone , Lat, Lng, Membership) VALUES ('' , '$First_Name' , '$Last_Name' , '$Email' , '$Username' , '$hashedPW' , '$Street' , '$Apt' , '$City' , '$State' ,'$ZipCode' ,'$Country' , '$results' , '$Ph_Number' , '$Mb_Number' , '0' , '0' , '1')");

// Insert Data into address_tb
$ad = mysql_query("SELECT UserID , Username FROM users_tb WHERE Username = $Username");
$adad = mysql_fetch_row($ad);
$UserID = mysql_real_escape_string($adad['UserID']);
$query = mysql_query("INSERT INTO address_tb (AddressID , Street , Apt , City , State , ZipCode , Country , Address , Lat , Lng , UserID) VALUES ('' , '$Street' , '$Apt' , '$City' , '$State' ,'$ZipCode' ,'$Country' , '$results' , '0' , '0' , '$UserID')");

我的address_tb 表中还需要有地址字段以及相应的UserID

【问题讨论】:

  • 参数化您的语句,您可能容易受到 SQL 注入的攻击。有关更多信息,请参阅此question & answer。此外,mysql_* 函数不再支持,它们在 PHP 7.0.0 中为 officially deprecated不再维护removed。您应该使用PDOMySQLi 更新您的代码,以确保您的项目在未来的功能。
  • 为什么要复制数据?你不能标准化你的数据库吗?

标签: php mysql insert


【解决方案1】:

这可以在 1 个查询中完成,使用 INSERT SELECT

INSERT INTO address_tb (AddressID,
                        Street,
                        Apt,
                        City,
                        State,
                        ZipCode,
                        Country,
                        Address,
                        Lat,
                        Lng,
                        UserID)
SELECT (AddressID,
        Street,
        Apt,
        City,
        State,
        ZipCode,
        Country,
        Address,
        Lat,
        Lng,
        UserID)
FROM users_tb
WHERE users_tb.Username = ?;

【讨论】:

  • 亲爱的 Cid,感谢您的考虑。我刚刚将提供的代码添加到我的 php.ini 文件中。但它运行 "Parse error: syntax error, unexpected 'INTO' (T_STRING) in /home/ezdelivery/public_html/Do_Register.php on line 48" 。其中 48 行是代码中的第一行。
  • 你用""包裹了吗?
  • 我有这个视图中的代码。 "$query = mysql_query("INSERT INTO address_tb (AddressID, Street, Apt, City, State, ZipCode, Country, Address, Lat, Lng, UserID) SELECT (AddressID, Street, Apt, City, State, ZipCode, Country, Address , Lat, Lng, UserID) FROM users_tb WHERE users_tb.Username = '$Username'");"但不幸的是它没有将数据插入到address_tb表中。
【解决方案2】:

$Username 应该用单引号括起来,因为它是一个字符串。

$ad = mysql_query("SELECT UserID , Username FROM users_tb WHERE Username = '$Username'");

第二个问题是,[mysql_fetch_row][1] 返回枚举数组,即键作为数字索引。更改为mysql_fetch_assoc

$adad = mysql_fetch_assoc($ad);

另一种方法是获取最后一个插入 id 并使用它来添加地址。 插入用户表后,使用以下方法检索最后一个用户ID

$last_user_id = mysql_insert_id();

address_tb 的插入查询中直接使用$last_user_id

请注意,mysql 已弃用。您应该将mysqli 与参数化查询一起使用(https://www.w3schools.com/php/php_mysql_prepared_statements.asp)。

【讨论】:

  • (甚至更好,参数化)
  • 感谢您的考虑。我用单引号做,但我的表又是空的。
  • @Cid,正在起草。将其添加为注释。
  • @George,检查我更新的答案。此外,远离mysql 并使用准备好的语句。我根据您当前的实施提供了解决方案,让您了解它的工作原理。
  • @Samir,感谢您的帮助。我很感激。我只是对第一个解决方案进行了相应的更改,但没有结果: $ad = mysql_query("SELECT UserID , Username FROM users_tb WHERE Username = '$Username'"); $adad = mysql_fetch_assoc($ad); $UserID = mysql_real_escape_string($adad['UserID']); $query = mysql_query("INSERT INTO address_tb (AddressID , Country , Address , Lat , Lng , UserID) VALUES ('' , ' , '$Country' , '$results' , '0' , '0' , '$UserID ')");
【解决方案3】:

我做到了。谢谢大家。说实话我不明白第二个INSERT查询没有完成address_tb中的数据的原因是什么。我只接受了第一个查询并作为第二个查询进行了编辑,它开始工作。正如我所见,我的新查询没有任何差异,这是我从编辑第一个查询中得到的。这是我的第二个查询:

>

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 2015-01-15
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多