Ik ben bezig met een php form waar een bedrijf moet worden toegevoegd, maar als die wordt toegevoegd, dan moet er ook meteen iets in een andere tabel worden gezet die zelfde id mee krijgt. c_id in companies heeft een autoincrement en in linkbuilding dus niet.

de query hieronder is fout zoals jullie zelf ook wel zien, maar ik zou niet weten hoe ik het wel goed kan doen.



			$insertCheck =  "INSERT INTO companies 
									VALUES ('', 
											'" . stripslashes(mysql_real_escape_string($_POST['rm_id'])) . "', 
											'" . stripslashes(mysql_real_escape_string($_POST['c_name'])) . "',
											0 );";
											
			$insertLinkbuilding = "INSERT INTO linkbuilding 
										VALUES ('(SELECT MAX(c_id) FROM companies LIMIT 1)', 
												'YEAR(NOW())');";


Bij voorbaat dank :)
Zoek eens naar 'last inserted id'.
Zodra je de eerste insert hebt gedaan, gebruik je dat id voor de 2e insert.
Ik heb het een beetje uit lopen vogelen, maar bij de 2e query kent hij de row companies niet, hoe zorg ik ervoor dat die weet dat ik c_id uit companies bedoel?


INSERT INTO companies VALUES ('', '7', 'TEST', '0' ); <--- werkt

INSERT INTO linkbuilding VALUES (LAST_INSERT_ID(companies), YEAR(NOW())); <--- deze niet
Dat gaat automatisch. De MySQL database zal zelf het laatst gegenereerde id binnen dezelfde connectie gebruiken. Als je er dus geen andere query tussen draait gaat het goed.
Nee, companies komt ook niet voor in 'linkbuilding'.

INSERT INTO foo (auto,text)
    VALUES(NULL,'text');         # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text');  # use ID in second table

En wat nou als toevallig 2 personen op andere computers tegelijkertijd een bedrijf toevoegen? gaat de database zich dan niet verwarren met elkaar?
Dat zijn verschillende connecties, dus dat maakt niets uit. Een database gaat niets 'verwarren' met elkaar.
Bedankt allebei, het probleem is opgelost :)

Toevoeging op 25/04/2014 16:13:51:

Ik dacht dat het probleem nu wel helemaal opgelost zou zijn, maar toen ik het form af maakte en hem teste deed hij het niet...

ziet iemand hier een fout in?


<?php
			$insertCheck =  "INSERT INTO companies 
											(c_id, 
											rm_id, 
											c_name, 
											c_invisibility) 
											
									VALUES	(NULL,
											'" . stripslashes(mysql_real_escape_string($_POST['rm_id'])) . "', 
											'" . stripslashes(mysql_real_escape_string($_POST['c_name'])) . "', 
											'0');";
											
			$insertLinkbuilding = "INSERT INTO linkbuilding 
													(c_id, 
													y_id) 
													
											VALUES	(LAST_INSERT_ID(), 
													YEAR(NOW()));";
													
			$queryInsert = mysql_query($insertCheck && $insertLinkbuilding); <--zelf denk ik hier
?>
wat je nu doet is een vergelijking en het resultaat daarvan (true of false) meegeven aan de mysql_query functie.

Met de mysql_query() functie kun je slechts één (insert) query tegelijk meegeven.

Kijk eens naar http://www.php.net/manual/en/mysqli.quickstart.multiple-statement.php

Deze functie kan meerdere queries verwerken maar die moet je dan wel als één string meegeven.

Het werkt wel met mysqli_ functies en niet met mysql_ functies. Dit is tevens beter omdat mysql_ er langzaam uitgaat. Je moet dan alle mysql_ functies omzetten naar mysqli_ dus ook de mysql_connect functie bijvoorbeeld.
De (volgorde van) de parameters die je aan de functies meegeeft wijkt soms enigzins af van de mysql_ functies.

Reageren