【问题标题】:PHP/ MYSQL Inserting Data Into Multiple TablesPHP/MYSQL 将数据插入多个表
【发布时间】:2011-05-30 17:05:08
【问题描述】:

我正在尝试使用 PHP 将数据添加到 3 个表中,atm 我只能查看加入的表的结果。

结果查询

  $sql = mysql_query("SELECT PART_ID, PART_DESC, SERIAL_NUM, PART.RACK_NUM, PART.PART_TYPE_ID,      PART_TYPE_DESC, LOCATION
    FROM PART
    INNER JOIN PART_TYPE ON PART.PART_TYPE_ID = PART_TYPE.PART_TYPE_ID
    INNER JOIN RACK ON RACK.RACK_NUM = PART.RACK_NUM

这将从 PART 表中获取所有行,并且对于我们找到的每一行,将该行与 PART_TYPE 表中的一行匹配(条件是它们具有相同的 PART_TYPE_ID)。如果在 PART 表中的给定行中找不到 PART 和 PART_TYPE 表之间的匹配项,则该行将不会包含在结果中。

我的插入查询这是我遇到问题的地方

如何将数据添加到 PART_ID、PART_TYPE 和 RACK 表中?

<?php 
// Parse the form data and add inventory item to the system
if (isset($_POST['PART_ID'])) {
    $id = mysql_real_escape_string($_POST['PART_ID']);
    $PART_DESC = mysql_real_escape_string($_POST['PART_DESC']);
    $SERIAL_NUM = mysql_real_escape_string($_POST['SERIAL_NUM']);
    $RACK_NUM = mysql_real_escape_string($_POST['RACK_NUM']);
    $PART_TYPE_ID = mysql_real_escape_string($_POST['PART_TYPE_ID']);
    $LOCATION = mysql_real_escape_string($_POST['LOCATION']);
    $PART_TYPE_DESC = mysql_real_escape_string($_POST['PART_TYPE_DESC']);
    // See if that product name is an identical match to another product in the system
    $sql = mysql_query("SELECT PART_ID FROM PART WHERE PART_ID='$id' LIMIT 1");
    $productMatch = mysql_num_rows($sql); // count the output amount
    if ($productMatch > 0) {
        echo 'Sorry you tried to place a duplicate "Product Name" into the system, <a href="inventory_list.php">click here</a>';
        exit();
    }
    // Add this product into the database now
    **$sql = mysql_query("INSERT INTO PART (PART_ID, PART_DESC, SERIAL_NUM, RACK_NUM, PART_TYPE_ID) 
        VALUES('$id','$PART_DESC','$SERIAL_NUM','$RACK_NUM','$PART_TYPE_ID')") or die (mysql_error());**


     header("location: inventory_list.php"); 
    exit();
}
?>

【问题讨论】:

标签: php mysql


【解决方案1】:

Micheal,如果我理解您的问题,您只需执行 2 个其他 SQL INSERT 即可在另一个表中添加数据

$sql = mysql_query("INSERT INTO PART (PART_ID, PART_DESC, SERIAL_NUM, RACK_NUM, PART_TYPE_ID) 
        VALUES('$id','$PART_DESC','$SERIAL_NUM','$RACK_NUM','$PART_TYPE_ID')") or die (mysql_error());

$currentID = mysql_inserted_id();

$sql2 = mysql_query("INSERT INTO PART_TYPE [..]");
$sql3 = mysql_query("INSERT INTO RACK [..]");

如果需要插入 PART 的最后一条记录的 ID,可以使用 $currentID

但我还是强烈建议你学习 PDO http://php.net/pdo for sql

【讨论】:

  • 是的,这是正确的,这会解决结果不显示 PART_TYPE 表中的项目吗?
  • 我不明白你有什么问题
  • 当我添加由于内部连接而未列出的项目时,它们会被添加,但由于我的插入语句,它们选择查询不会显示任何新项目。如果它在没有零件表的情况下执行选择语句,则会出现新项目。因此,如果我添加一个 ID 为 1001 的新项目,它不会仅列出项目 1003,依此类推,将使用 join 语句显示。
  • @michaael 那么你的 SELECT 查询是错误的,因为 FULL OUTER JOIN 选择了其他表上没有外键的记录
【解决方案2】:

您的表管理是错误的,您永远不会使用箭头来表明您正在将其与该表中的该表连接,而是从第一个表中的键到第二个表中的外键,这就是我要开始的,也许更好的主意是使用JOIN 加入他们,在谷歌中查找连接是如何工作的,这可能是原因......

我同意@yes123,这是插入表的正确方法,如果您有一个名为heidisql 的程序,请使用它,因为有一个窗口可以运行您的查询……这样可以测试它是否正确编写也使用mysql_error。

调试、调试,然后再调试您的代码。

【讨论】:

    【解决方案3】:

    您的表格设计不正确。 试试这个表结构。

    在您的基表部分中。 -

    其中的列应该是:

    Part_id
    part_desc
    serial_num
    

    part_type 应该有以下列:

    part_type_id
    part_type_desc
    part_id -> foreign key to the parent table
    

    机架表应该是:

    Rack_num
    location
    part_id -> foreign key to the parent table.
    

    因此,获取所有零件相关信息的选择查询将是:

    $sql="select * from part join part_type pt on tp.part_id=part.part_id join Rack_num rn on rn.part_id=part.part_id";
    

    使用这种结构,数据保持标准化。并且非常灵活,因此如果零件位于多个机架上,您只需前往机架表并添加新的机架号和零件 ID。

    【讨论】:

    • 感谢您的回答,这是一个从头开始创建库存站点的学士作业。我最终想通了,并在作业和演示文稿上得到了 A。遗憾的是,我没有得到一份编程工作,而我现在正在攻读博士学位,哇,时间过得真快。
    • 恭喜您的演示文稿获得 A。不要担心你最终会到达那里的工作..继续努力。
    猜你喜欢
    • 2012-06-13
    • 2010-12-07
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2017-07-03
    • 1970-01-01
    • 2018-09-27
    相关资源
    最近更新 更多