Avatar billede leif Seniormester
03. august 2008 - 13:30 Der er 22 kommentarer og
1 løsning

mysq_insert_id() virker ikke

Hej,

Jeg har følgende:
$result = db_sql($sql);
$id = mysql_insert_id();

db_sql() er en function som åbner databasen udfører SQL sætningen og lukker databasen igen.


Men hvordan kan jeg så få det sidste indsatte id ?


/Leif
Avatar billede leif Seniormester
03. august 2008 - 13:31 #1
Jeg bruger min egen db_sql() i stedet for mysql_query() fordi der sker en log manuelt af alle kald
Avatar billede hmortensen Nybegynder
03. august 2008 - 13:34 #2
Du skriver at du lukker forbindelsen igen, måske det er synderen.
Avatar billede olebole Juniormester
03. august 2008 - 13:34 #3
<ole>

$result = mysql_query($sql);
$id = mysql_insert_id();

- har altid virket for mig (og mange andre), så det kan vist dårligt besvares udfra det opgivne  =)

/mvh
</bole>
Avatar billede olebole Juniormester
03. august 2008 - 13:35 #4
Arrrhhh, selvfølgelig ... hmortensen har nok givet dig svaret  ;o)
Avatar billede leif Seniormester
03. august 2008 - 13:46 #5
Ja, min function består af:
function db_sql($sql) {
mysql_connect("localhost",$DB_Username,$DB_Password) or die ("Ingen forbindelse til databasen");
mysql_select_db($DB_Database) or die ("Ingen forbindelse til tabellen");
$result = mysql_query($sql) or die (mysql_error()."<br><br><hr>".$sql);
log_txt("SQL RUN","SQL","SQL","SQL","",$sql);
mysql_close();

return $result;
}
Avatar billede leif Seniormester
03. august 2008 - 13:46 #6
Den er justerert lidt ned.
Avatar billede hmortensen Nybegynder
03. august 2008 - 13:47 #7
Prøv at fjerne mysql_close(); kaldet.
Avatar billede coderdk Praktikant
03. august 2008 - 13:48 #8
Du kalder mysql_close - derfor virker mysql_insert_id ikke. Den bruger den aktive connection.
Avatar billede leif Seniormester
03. august 2008 - 13:51 #9
coderdk -> Ahh, derfor.
Avatar billede leif Seniormester
03. august 2008 - 18:26 #10
Hmm, virker stadig ikke
Avatar billede supersquirrel Nybegynder
03. august 2008 - 18:33 #11
Hvor får du $DB_Username og $DB_Password fra?
Giver den en fejl?
Avatar billede leif Seniormester
03. august 2008 - 18:37 #12
Den udfører SQL sætningen, men jeg får ikke mysql_insert_id();


Jeg har umiddelbart fundet en løsning:
function db_sql($sql) {

global $lastid;

mysql_connect("localhost",$DB_Username,$DB_Password) or die ("Ingen forbindelse til databasen");
mysql_select_db($DB_Database) or die ("Ingen forbindelse til tabellen");
$result = mysql_query($sql) or die (mysql_error()."<br><br><hr>".$sql);
$lastid = mysql_insert_id();
log_txt("SQL RUN","SQL","SQL","SQL","",$sql);
mysql_close();

return $result;
}
Avatar billede leif Seniormester
03. august 2008 - 18:37 #13
Så kan jeg trække $lastid udenfor functionen
Avatar billede olebole Juniormester
03. august 2008 - 20:59 #14
- og sql'en er vel en insert, ikk'?  =)

Ellers skal du finde sidste id noget i stil med:
    $sql = "SELECT MAX(id) AS lastID FROM myTABLE";
    $result = mysql_query($sql) or die (mysql_error()."<br><br><hr>".$sql);
    $row = mysql_fetch_assoc($result);
    $lastID = $row["lastID"];
Avatar billede leif Seniormester
03. august 2008 - 21:25 #15
Det er ikke altid en SQL, men den brokker sig ikke ved DELETE og UPDATE
Avatar billede coderdk Praktikant
03. august 2008 - 21:37 #16
Bare lige for at få det på plads: mysql_insert_id() virker naturligvis kun ved INSERT INTO... Ellers returnerer den 0 eller FALSE (sidste ved ingen forbindelse)...
Avatar billede coderdk Praktikant
03. august 2008 - 21:38 #17
Og det kræver en AUTO_INCREMENT kolonne i tabellen ;)
Avatar billede leif Seniormester
03. august 2008 - 21:46 #18
auto_increment var jeg klar over.

Cool, så lyder det som om at i mit tilfælde er det løsningen 03/08-2008 18:37:32 som jeg skal bruge.
Avatar billede olebole Juniormester
03. august 2008 - 22:36 #19
Lidt kønnere end den globale variabel ville måske være:

function db_sql($sql) {
    mysql_connect("localhost",$DB_Username,$DB_Password) or die ("Ingen forbindelse til databasen");
    mysql_select_db($DB_Database) or die ("Ingen forbindelse til tabellen");
    $result = array();
    $result["queryRes"] = mysql_query($sql) or die (mysql_error()."<br><br><hr>".$sql);
    $result["lastID"] = mysql_insert_id();
    log_txt("SQL RUN","SQL","SQL","SQL","",$sql);
    mysql_close();
   
    return $result;
}

$res = db_sql( SQL_INSERT_STRENG );
print $res["queryRes"];
print $res["lastID"];
Avatar billede leif Seniormester
05. august 2008 - 15:13 #20
Smid et svar alle sammen, kan ikke lige gennemskue hvem der kom med det endelige svar
Avatar billede coderdk Praktikant
05. august 2008 - 15:24 #21
ingen til mig, tak
Avatar billede leif Seniormester
10. august 2008 - 17:43 #22
olebole -> Så smid du et svar.
Avatar billede leif Seniormester
25. oktober 2008 - 23:58 #23
Nå, hvis olebolde ønsker point så må han råbe op så skal der blive oprettet et spm. til formålet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester