PHP / MYSQL将数据插入多个表

时间:2011-05-30 17:05:09

标签: php mysql

我正在尝试使用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();
}
?>

enter image description here

3 个答案:

答案 0 :(得分:1)

Micheal,如果我理解你的问题,你只需要做另外两个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

答案 1 :(得分:0)

你的表管理是错误的,你从不使用箭头只显示你从这个表中加入该表,而是从第一个表中的键到第二个表中的外键,这就是我要从,也许更好的想法是加入他们使用JOIN查找谷歌联接如何工作,这可能是原因...

我同意@ yes123,这是插入表格的正确方法,如果你有一个名为heidisql的程序然后使用它,因为有一个窗口可以运行你的查询...这种方式来测试如果写得正确也使用mysql_error。

调试,调试,再一次调试代码。

答案 2 :(得分:0)

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

在基础表中。 -

这里的列应该是:

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。