Ik heb een vraagje over de volgende code.
<?php
for($i = 1; $i <= $product_aantal; $i++) {
connect();
$product_nr = "product_nummer$i";
$product_txt = "product_tekst$i";
$product_pr = "product_prijs$i";
$product_st = "product_status$i";
$inventaris_insert = "INSERT INTO inventaris (artikelnr,naam_id,tekst,prijs,status) VALUES ('" . $$product_nr ."','$naam_id','" . $$product_txt ."','" . $$product_pr ."','" . $$product_st ."');";
echo $inventaris_insert . '<br>';
$inserted = "inserted$i";
$$inserted = mysql_query($inventaris_insert);
mysql_close();
}
?>
Deze code heb ik zelf gemaakt maar nu is er een probleem bij het invoeren. Er wordt maar 1 rij in de db toegevoegd terwijl ik er wel meerdere opgeef. Om te controleren wat er gebeurd heb ik echo toegevoegd en die geeft wel alle inserts weer, zoals hieronder te zien.
INSERT INTO inventaris (artikelnr,naam_id,tekst,prijs,status) VALUES ('20829182645','5','tekst a','999.95','1');
INSERT INTO inventaris (artikelnr,naam_id,tekst,prijs,status) VALUES ('20829182646','5','tekst b','999.99','2');
INSERT INTO inventaris (artikelnr,naam_id,tekst,prijs,status) VALUES ('20829182647','5','tekst c','1000.00','3');
Hierbij is artikelnr een unieke waarde en wordt er automatisch een id aan de rij toegevoegd.
Wat heb ik fout gedaan?
Ik krijg de foutmelding: Duplicate entry '2147483647' for key 2
key 2 is dat artikelnr uniek moet zijn. Bij de eerste INSERT worden alle gegevens goed ingevuld behalve het artikelnr. Hier wordt het laatste artikelnr gebruikt: 2147483647. Ik snap niet hoe dit kan aangezien de rest van de gegevens wel goed ingevuld worden.
Ook als ik de loop maar 1 keer laat lopen wordt er 2147483647 ingevuld maar bij de test echo staat wel 2147483645.
Artikelnr is vast van het type "integer", deze loopt maar tot max. 2147483647. Het fijne (NOT) van MySQL is dat hij daar schijt aan heeft en gewoon jouw waarde aanpast en hij 'm wel op kan slaan.
Oplossing? Je zou er een unsigned integer van kunnen maken, je kunt dan geen negatieve getallen invoeren en het bereik van je int ligt dat op iets meer dan 4 miljard.
Ook zou je ervoor kunnen kiezen om er een varchar met een bepaalde lengte van te maken.