0

データベースに値を挿入する作業を行っています。製品を挿入する必要があります。ユーザーはフロントエンドに複数の製品を追加できます。このために、データベースに2つのテーブルがあります。最初はtbl_testで、2番目はtbl_test_monthsです。tbl_test では、製品名と製品の成長率を挿入しています。製品の価格とセールは 12 か月間続きます。したがって、2 番目のテーブルでは、月ごとに製品 ID、売上、価格を入力する必要があります。しかし、私の製品IDが正しく入力されていません。12 か月後に 2 番目の製品 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

配列内のIDを取得し、それに応じて挿入する必要があります。このように試してください

$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_testmysql_*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_INCREMENT使用した列であると想定しています。その場合、insert ステートメントで mysql_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 に答える