0

我正在将值插入数据库。我需要插入产品。用户可以在前端添加多个产品。为此,我在数据库中有 2 个表。第一个是 tbl_test,第二个是 tbl_test_months。在 tbl_test 我插入产品名称和产品增长率。产品价格和销售将持续 12 个月。所以在第二张表中,我需要按月份输入产品 ID、销售额、价格。但我的产品 ID 输入方式不正确。我想在 12 个月后需要第二个产品 ID。这是我的代码。请帮我。

for($p=0; $p < $countProduct; $p++)
{
    $revInsert= "insert into tbl_test(id, user_id, product_name, price_growth_rate_year1, price_growth_rate_year2, sale_growth_rate_year1, sale_growth_rate_year2, scenario, currency_type, price_raise)
                values('','".$user_id."', '".$productName[$p]."', '".$growth_price_first[$p]."', '".$growth_price_second[$p]."', '".$growth_sale_first[$p]."', '".$growth_sale_second[$p]."', '".$scenario."', '".$pCurrency[$p]."', '".$priceRaiseStatus[$p]."')";
    $QueryRev= mysql_query($revInsert);
    $id= mysql_insert_id();
}
for($q=0; $q<$cnt; $q++)
{  
    $rev_month_insert= "insert into tbl_test_months(id, user_id, product_id, month, year, sale_volume, sale_price, scenario) 
    values('','".$user_id."', '".$id."','".$months1[$q % 12]."', '".$year."', '".$sale_volume1[$q]."', '".$price_currency_contract[$q]."', '".$scenario."')";
    $query= mysql_query($rev_month_insert);
}
4

2 回答 2

1

您需要将 ids 放入数组中并相应地插入它们。像这样尝试

$id_arr = array();
for($p=0; $p < $countProduct; $p++)
{
    $revInsert= "insert into tbl_test(id, user_id, product_name, price_growth_rate_year1, price_growth_rate_year2, sale_growth_rate_year1, sale_growth_rate_year2, scenario, currency_type, price_raise)
                values('','".$user_id."', '".$productName[$p]."', '".$growth_price_first[$p]."', '".$growth_price_second[$p]."', '".$growth_sale_first[$p]."', '".$growth_sale_second[$p]."', '".$scenario."', '".$pCurrency[$p]."', '".$priceRaiseStatus[$p]."')";
    $QueryRev= mysql_query($revInsert);
    $id_arr[] = mysql_insert_id();
}
for($q=0; $q<$cnt; $q++)
{  
    $rev_month_insert= "insert into tbl_test_months(id, user_id, product_id, month, year, sale_volume, sale_price, scenario) 
    values('','".$user_id."', '".$id_arr[$q]."','".$months1[$q % 12]."', '".$year."', '".$sale_volume1[$q]."', '".$price_currency_contract[$q]."', '".$scenario."')";
    $query= mysql_query($rev_month_insert);
}

并确保您auto increment在表中有一个字段tbl_test并且不要使用mysql_*函数,因为它们已被弃用。而是使用mysqli_*函数或PDO语句

于 2013-08-07T06:58:51.317 回答
0

来自文档(http://php.net/manual/en/function.mysql-insert-id.php)。

返回值:上一个查询成功时为 AUTO_INCREMENT 列生成的 ID,如果上一个查询没有生成 AUTO_INCREMENT 值,则为 0,如果没有建立 MySQL 连接,则为 FALSE。

我假设您的id列是使用的AUTO_INCREMENTmysql_insert_id,在这种情况下,您不想id在插入语句中指定。

即使该列是自动递增的,您仍然可以id在插入查询中提供。但在你的情况下,你正在提供''. $p=1如果这是一个主键列,那么由于重复的主键 ,您在第一个循环中的插入查询应该在索引处失败。

根据您提供的内容,我认为解决方案如下:

for($p=0; $p < $countProduct; $p++)
{
    $revInsert= "insert into tbl_test(user_id, product_name, price_growth_rate_year1, price_growth_rate_year2, sale_growth_rate_year1, sale_growth_rate_year2, scenario, currency_type, price_raise)
                values('".$user_id."', '".$productName[$p]."', '".$growth_price_first[$p]."', '".$growth_price_second[$p]."', '".$growth_sale_first[$p]."', '".$growth_sale_second[$p]."', '".$scenario."', '".$pCurrency[$p]."', '".$priceRaiseStatus[$p]."')";
    $QueryRev= mysql_query($revInsert);
    $product_id= mysql_insert_id();

    for($q=0; $q<$cnt; $q++)
    {  
      $rev_month_insert= "insert into tbl_test_months(user_id, product_id, month, year, sale_volume, sale_price, scenario) 
      values('".$user_id."', '".$product_id."','".$months1[$q % 12]."', '".$year."', '".$sale_volume1[$q]."', '".$price_currency_contract[$q]."', '".$scenario."')";
      $query= mysql_query($rev_month_insert);
    }

    // Update
    unset($product_id);
}
于 2013-08-07T07:03:43.237 回答