[PHP] Problemen met mysql_insert_id()

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

ik heb een probleempje met de functie mysql_insert_id().
Ik ben een soort DB aant maken met mn mp3s erin. Nu heb ik het gemaakt dat hij de ID3 tag leest enzo. Er gaat echter iets fout na het inserten. Waarschijnlijk is het iets heeeel simpels, maar ik zie het gewoon ff niet.

Dit is mijn code:

code:
1
2
3
4
5
6
7
8
9
10
11
$res = query("SELECT MAX(artistid) FROM artists WHERE LOWER(name) = \"" . strtolower($artist) . "\"");
$result = mysql_fetch_array($res); 
// Eerst even kijken of de artiest niet al bestaat, gebruik anders het oude ID.   
if($result[0]>0)       
   $artistid = $result[0];
else // Artist toevoegen -> Hij bestaat nog niet.
{
   echo "SQL: INSERT INTO artists (name) VALUES(\"$artist\")" ;
   $insert_artist = mysql_query("INSERT INTO artists (name) VALUES(\"$artist\")");
   $artistid = mysql_insert_id($insert_artist);            
}


Verder krijg ik deze foutmelding:
code:
1
2
Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link resource in
d:\internet\phpdev\www\musicdb\test.php on line 37


Regel 37 is dus de regel waar hij de nieuwe id opvraagt.

Mvg & Bvd

[ Voor 19% gewijzigd door Verwijderd op 28-11-2003 17:21 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Zie bij www.php.net/mysql_query wat voor ding die functie teruggeeft en bij www.php.net/mysql_insert_id wat voor parameter die graag wil hebben (voor zover ie er een wil)...

Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
Oftewel je gebruikt mysql_insert_id() in de insert query (deze laat dan de auto-increment field 1 omhoog gaan). Wil je de nieuwe id hebben dan zul je moeten kijken of daar een functie voor is, of een select query na de insert moeten doen.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

FlamerX schreef op 28 november 2003 @ 17:33:
Oftewel je gebruikt mysql_insert_id() in de insert query (deze laat dan de auto-increment field 1 omhoog gaan). Wil je de nieuwe id hebben dan zul je moeten kijken of daar een functie voor is, of een select query na de insert moeten doen.
Nee, je snapt mijn posting niet ;)
De functie mysql_insert_id is de correcte functie om te gebruiken voor het achterhalen van de laatste autoincremented-value, maar dat zegt nog niet dat je daar zomaar alles in kan stoppen wat je wil.

Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 12-09 01:23
ACM schreef op 28 november 2003 @ 17:35:
[...]

Nee, je snapt mijn posting niet ;)
De functie mysql_insert_id is de correcte functie om te gebruiken voor het achterhalen van de laatste autoincremented-value, maar dat zegt nog niet dat je daar zomaar alles in kan stoppen wat je wil.
Hmm, never knew that. Weer wat geleerd dus ;) (al lang niets meer gedaan met PHP, ben weer met Java begonnen :+)

Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
De parameter van mysql_insert_id() is zelfs optioneel, dus
PHP:
1
$artistid = mysql_insert_id();
zal ook werken.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd


Voor de duidelijkheid nog even:

mysql_insert_id() returns the ID generated for an AUTO_INCREMENT column by the previous INSERT query using the given link_identifier. If link_identifier isn't specified, the last opened link is assumed.

Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Het allermooiste om te doen is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$link = mysql_connect("host", "username", "password")
     or die("No connection");
mysql_select_db("database", $link)
     or die("No database select");

$query = "INSERT INTO tabel (naam, woonplaats) VALUES ('Alex', 'Den Bosch')";
$result = mysql_query($query, $link)
     or die("Error while querying query");
$insert_id = mysql_insert_id ($result);

print "De database heeft het nummer " .$insert_id. " aan de gegevens toegekend.";
mysql_close($link);

Let hierbij wel heel goed op dat je $link scheidt van $result. Gebruik daarvoor dus ook duidelijke namen.

[ Voor 13% gewijzigd door Alex op 29-11-2003 14:51 . Reden: typo ]

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En jij maakt dus heel simpel dezelfde fout als de topicstarter...
De toevoeging van de $link-parameter is inderdaad netter, maar je verhelpt het probleem niet. Jij stopt net zo goed expliciet de $result in de mysql_insert_id terwijl die helemaal niet met een Result-identifier werkt, maar met een Link-identifier.

[ Voor 33% gewijzigd door ACM op 29-11-2003 16:59 ]

Pagina: 1