Toon posts:

[mysql] Dubbele query uitvoeren lukt niet

Pagina: 1
Acties:
  • 408 views

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een invoerveld gemaakt om gegevens toe te voegen aan een mysql database. Ik wil met 1 query 2 tabellen beschrijven. Nu weet ik niet hoe ik dit doen moet. Ik heb gegoogled, maar vond nergens hoe ik deze opdracht in 1 query zet. Zelf ook diverse malen geprobeerd om het werkend te krijgen, maar toto nu toe geen succes.

Ik heb momenteel wel de query voor 1 tabel klaar.

PHP:
1
INSERT INTO albums (eId, nr, titel, bezit, wie, aantal, datum, tijd) VALUES ('$editie', '$nr', '$titel', '$bezit', '$wie', '$aantal', '$datum', '$tijd')


Dit is dus eenvoudig.
Nu moet er in de andere tabel ook gegevens worden toegevoegd. Deze tabel bevat oa de velden: datum en tijd.

Hoe kan ik dit in dezelfde query opnemen. Dus dat tabel 1 en tabel 2 gegevens toegevoegd krijgen?
Of moet ik er 2 queries voor gebruiken?

mvg,

Ferry

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Nu online

BCC

Wat is precies het probleem van 2 queries?

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Met een ; geef je aan dat dit het eind van de query is. Daarachter kan je een nieuwe query plakken. dit tot in den treure.
Zie bv. sqldumps.

Maar niet elke SQLDriver ondersteund het, je zal het moeten uit proberen. Als het niet wil dan kan je altijd nog een Stored Procedure aanroepen(mits je db het ondersteund), waarin je twee inserts doet.

En wat BCC zegt!

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In de 2e tabel moet de PK worden opgenomen die in de 1e tabel wordt gemaakt. Het leek me daarom dat je 2 INSERT opdrachten moet opnemen in 1 query, waarbij er in beide tabellen 'n rij wordt toegevoegd.

Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Je wilt dus de PK van een tabel hebben en deze invoegen in een andere tabel.

zie: How to Get the Unique ID for the Last Inserted Row Daarmee kan je het gebruiken voor de volgende tabel

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Spiral schreef op vrijdag 26 december 2008 @ 13:58:
Je wilt dus de PK van een tabel hebben en deze invoegen in een andere tabel.

zie: How to Get the Unique ID for the Last Inserted Row Daarmee kan je het gebruiken voor de volgende tabel
Da's een interessante uitleg. Ik heb uitgeprobeerd of ik hiermee krijg wat ik graag wil. Ik heb LAST_INSERT_ID() gebruikt bij de 2e INSERT. De query werkt, maar ik krijg niet de PK die in de 1e INSERT actie is toegevoegd in de 2e tabel, bij aId.

PHP:
1
2
INSERT INTO albums (eId, nr, titel, bezit, wie, aantal) VALUES ('$editie', '$nr', '$titel', '$bezit', '$wie', '$aantal');
INSERT INTO stats (aId,datum,tijd) VALUES ('LAST_INSERT_ID()', '$datum', '$tijd')


Waarom zal dit niet werken??

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Is albums.eId dan wel een auto increment kolom? Is $editie dan gelijk aan 0 of null, of zet je zelf een waarde? Zie de opmerking in de reeds gegeven documentatie:
LAST_INSERT_ID() returns only automatically generated AUTO_INCREMENT values. If you store an explicit value other than NULL or 0, it does not affect the value returned by LAST_INSERT_ID().
Laat eens wat inzet zien, toon tabel structuren, toon de letterlijk uitgevoerde query (dus niet enkel de php code met variabelen), var_export() eens gewoon mysql_insert_id() na de 1e query, etc. etc.

{signature}


Acties:
  • 0 Henk 'm!

  • Speedener
  • Registratie: September 2000
  • Laatst online: 23-09 13:18
Je moet de quotes weghalen om LAST_INSERT_ID(); het is een MySQL functie geen string.

LG Therma V Split WP: HU143MA.U33-HN1636M NK5


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
^^ De winnende comment. :P

Haal overigens meteen ook maar de quotes om al die PHP variabelen weg... :X Enkel quotes om strings in je query, en in PHP gewoon lekker de variabelen niet binnen een double quoted string schrijven.

edit:
'getroffen rijen' :D

[ Voor 42% gewijzigd door Voutloos op 26-12-2008 15:00 ]

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zal wat extra informatie geven:

tabel 1 (albums) heeft deze kolommen:
aId eId nr titel bezit wie aantal datum tijd

eId verwijst naar een domeintabel waar de editie van het album staat.

tabel 2 (stats) heeft deze kolommen:
sId aId eId datum tijd

bij aId moet dus de PK komen te staan uit tabel 1 (albums)
eId verwijst naar een domeintabel waar de editie van het album staat.

INSERT INTO albums (eId, nr, titel, bezit, wie, aantal) VALUES ('1', '67', 'Album 1', '1', '2', '1');
INSERT INTO stats (aId,datum,tijd) VALUES ('LAST_INSERT_ID()', '2008-12-26', '12:12:12')

resultaat:
INSERT INTO albums( eId, nr, titel, bezit, wie, aantal )
VALUES (
'1', '67', 'Album 1', '1', '2', '1'
);# Getroffen rijen: 1
INSERT INTO stats( aId, datum, tijd )
VALUES (
'LAST_INSERT_ID()', '2008-12-26', '12:12:12'
)# Getroffen rijen: 1

Lijkt dus of de kolom aId uit de tabel stats niet de PK meekrijgt die in tabel 1 is aangemaakt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt!
Die quotos weglaten is inderdaad de oplossing. Hoe simpel het soms kan zijn ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Blijkbaar iets te vroeg gejuigd. Ik teste de query in de database, en daar werkt het. Als ik het in het script opneem, gaat er iets mis. Ik kan niet achterhalen wat niet goed gaat.

Hoe kan ik zien waar of wat er mis gaat om het te debuggen?

De query nog eens:

PHP:
1
2
mysql_query("INSERT INTO albums (eId, nr, titel, bezit, wie, aantal) VALUES ('$editie', '$nr', '$titel', '$bezit', '$wie', '$aantal');
INSERT INTO stats (aId, eId, datum, tijd) VALUES (LAST_INSERT_ID(), '$editie', '$datum', '$tijd')");

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
or die (mysql_error()); :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De mysql_error() geeft geen melding. Als ik de query uitvoer, krijg ik alleen de melding: Ër ging iets mis. Een melding die ik zelf heb ingesteld als de query niet uitgevoerd wordt.

Waar kan het fout gaan, en waarom krijg ik geen melding??

PHP:
1
2
3
4
5
6
7
$r = mysql_query("INSERT INTO albums (eId, nr, titel, bezit, wie, aantal) VALUES ('$editie', '$nr', '$titel', '$bezit', '$wie', '$aantal');
INSERT INTO stats (aId, eId, datum, tijd) VALUES (LAST_INSERT_ID(), '$editie', '$datum', '$tijd')");
  if(!$r)
  {
    echo "Er ging iets mis";
    mysql_error(); 
  }

Acties:
  • 0 Henk 'm!

  • 4rn0
  • Registratie: September 2008
  • Laatst online: 23-09-2021
mysql_error() geeft alleen de error terug, gebruik dus echo of exit om de output te kunnen zien!

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 10:43

Johnny

ondergewaardeerde internetguru

De mysql_query() functie van PHP ondersteunt maar één query als beveiling tegen SQL-injectie, je zult een functie zoals mysqli_multi_query() moeten gebruiken.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 23-09 21:37

Creepy

Tactical Espionage Splatterer

No offence maar tijd voor een fatsoenlijke PHP / MySQl tutorial? Je zult je fouten moeten leren opvangen en moeten leren wat bepaalde functies doen. Als je de handleiding erbij had gepakt van mysql_error() dan had je gezien dat deze de daadwerkelijke melding teruggeeft. Dit kan je vervolgens afdrukken.

Anyway, met dit topic moet je nogal bij het handje worden gehouden. Dat is hier niet echt de bedoeling. We verwachten van je dat je in eerste instantie zelf probeerd de basis onder de knie te krijgen en zelf fouten op te sporen. Probeer jezelf nog net even wat dieper in de materie te verdiepen. Mocht je er dan echt niet uitkomen dan kan je altijd weer een nieuw topic openen maar zorg dan wel dat je echt eerst zelf wat zaken hebt geprobeerd en dat je ook aangeeft wat je dan hebt geprobeerd in je topicstart.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.