PDA

Bekijk Volledige Versie : php /mysql vraagje



Paul van der Vlis
11/11/03, 12:30
Hoi,

Ik wil een nieuw record toevoegen, en daar later van alles in gaan
stoppen. Daarom moet ik het ID van dat record te weten komen, maar dat
wordt automatisch gegenereerd. Hoe kom ik nu achter dat ID?

Ik doe nu zoiets:

$sql="INSERT INTO $tabel (clientid) VALUES ('$clientid');
$result = mysql_query($sql);

en zou in feite graag uit die $result kunnen halen wat het ID is van het
record wat is toegevoegd. Kan dat ook?

Als dat niet kan, is er dan misschien een andere manier om een record
toe te voegen en dan wel precies te weten welk record dat is?

Ik kan namelijk wel het laatste record nemen met dat clientid, maar
helemaal veilig is dat niet...

Groet,
Paul.

Ronald Paul
11/11/03, 12:30
Paul van der Vlis <paul@vandervlis.nl> schreef:

>Ik wil een nieuw record toevoegen, en daar later van alles in gaan
>stoppen. Daarom moet ik het ID van dat record te weten komen, maar dat
>wordt automatisch gegenereerd. Hoe kom ik nu achter dat ID?

Kijk eens naar mysql_insert_id().

--
Groet, Ronald

Maarten Wierda
11/11/03, 12:30
Paul van der Vlis wrote:

> Hoi,

Hoi.

> Ik wil een nieuw record toevoegen, en daar later van alles in gaan
> stoppen. Daarom moet ik het ID van dat record te weten komen, maar dat
> wordt automatisch gegenereerd. Hoe kom ik nu achter dat ID?
>
> Ik doe nu zoiets:
>
> $sql="INSERT INTO $tabel (clientid) VALUES ('$clientid');
> $result = mysql_query($sql);
>
> en zou in feite graag uit die $result kunnen halen wat het ID is van het
> record wat is toegevoegd. Kan dat ook?

Jazeker, zie <http://nl.php.net/manual/en/function.mysql-insert-id.php>.

> Als dat niet kan, is er dan misschien een andere manier om een record
> toe te voegen en dan wel precies te weten welk record dat is?

Je kan na het inserten een SELECT uitvoeren en dan controleren met exact
die gegevens die je hebt toegevoegd, maar dit is niet waterdicht,
theoretisch gezien dan ;)

> Ik kan namelijk wel het laatste record nemen met dat clientid, maar
> helemaal veilig is dat niet...

Klopt. Stel je voor dat je dit gebruikt in een webshop, dan kunnen
meerdere gebruikers elkaars bestelling overnemen :-(

--
Cheers, Maarten Wierda

"Teenage angst has paid off well, now I'm bored and old"

Paul van der Vlis
11/11/03, 13:30
Hoi,

Beide hartelijk bedankt, mysql_insert_id() was precies wat ik nodig had.

Het verbaast me overigens wel dat dit werkt:

$sql="INSERT INTO $tabel (clientid) VALUES ('$clientid');
$result = mysql_query($sql);
$id = mysql_insert_id();

En dit niet:

$sql="INSERT INTO $tabel (clientid) VALUES ('$clientid');
$result = mysql_query($sql);
$id = mysql_insert_id($result);

Want dat geeft een foutmelding als dit:
Warning: mysql_insert_id(): supplied argument is not a valid MySQL-Link
resource

Krijg ik met die eerste oplossing wel zeker het goede resultaat?

Groetjes,
Paul.

Maarten Wierda
11/11/03, 13:45
Paul van der Vlis wrote:

> Het verbaast me overigens wel dat dit werkt:
>
> $sql="INSERT INTO $tabel (clientid) VALUES ('$clientid');
> $result = mysql_query($sql);
> $id = mysql_insert_id();
>
> En dit niet:
>
> $sql="INSERT INTO $tabel (clientid) VALUES ('$clientid');
> $result = mysql_query($sql);
> $id = mysql_insert_id($result);

De variabele mysql_insert_id() bevat het ID van het laatste toegevoegde
record. In de user comments lees ik overigens het volgende:

Check with (mysql_affected_rows()>0) if mysql_insert_id() returns a real
id.

<?php
if (mysql_affected_rows()>0) $id=mysql_insert_id();
?>

Dit zou ik even testen voor de zekerheid.

> Krijg ik met die eerste oplossing wel zeker het goede resultaat?

Ja.

--
Cheers, Maarten Wierda

"Teenage angst has paid off well, now I'm bored and old"

Ronald Paul
11/11/03, 14:00
Paul van der Vlis <paul@vandervlis.nl> schreef:

> Het verbaast me overigens wel dat dit werkt: $id = mysql_insert_id();
> En dit niet: $id = mysql_insert_id($result); Want dat geeft een
> foutmelding als dit: Warning: mysql_insert_id(): supplied argument is
> not a valid MySQL-Link resource

Mij niet, want een MySQL-result identifier (hetgeen wat mysql_query()
teruggeeft) is niet hetzelfde als een MySQL-link resource (hetgeen wat
mysql_connect() teruggeeft) :-)

--
Groet, Ronald

Paul van der Vlis
11/11/03, 14:15
Ronald Paul wrote:
> Paul van der Vlis <paul@vandervlis.nl> schreef:
>
>
>>Het verbaast me overigens wel dat dit werkt: $id = mysql_insert_id();
>>En dit niet: $id = mysql_insert_id($result); Want dat geeft een
>>foutmelding als dit: Warning: mysql_insert_id(): supplied argument is
>>not a valid MySQL-Link resource
>
> Mij niet, want een MySQL-result identifier (hetgeen wat mysql_query()
> teruggeeft) is niet hetzelfde als een MySQL-link resource (hetgeen wat
> mysql_connect() teruggeeft) :-)

Aha, ik begrijp het. Bedankt.

Groet,
Paul.

Paul van der Vlis
11/11/03, 14:15
Maarten Wierda wrote:
> Paul van der Vlis wrote:
>
>> Het verbaast me overigens wel dat dit werkt:
>>
>> $sql="INSERT INTO $tabel (clientid) VALUES ('$clientid');
>> $result = mysql_query($sql);
>> $id = mysql_insert_id();
>>
>> En dit niet:
>>
>> $sql="INSERT INTO $tabel (clientid) VALUES ('$clientid');
>> $result = mysql_query($sql);
>> $id = mysql_insert_id($result);
>
>
> De variabele mysql_insert_id() bevat het ID van het laatste toegevoegde
> record. In de user comments lees ik overigens het volgende:
>
> Check with (mysql_affected_rows()>0) if mysql_insert_id() returns a real
> id.
>
> <?php
> if (mysql_affected_rows()>0) $id=mysql_insert_id();
> ?>
>
> Dit zou ik even testen voor de zekerheid.

Ja, ik had het ook al gezien. Bedankt.

>> Krijg ik met die eerste oplossing wel zeker het goede resultaat?
>
> Ja.

Bedankt.

Groet,
Paul.