Avatar billede daniel_d Nybegynder
15. april 2007 - 18:20 Der er 9 kommentarer og
1 løsning

opdater tabel i db, eller indsæt ny hvis id ikke findes

Jeg mangler lidt hjælp til at ændre et query fra blot at kunne opdatere en tabel, til også at kunne indsætte nye rækker hvis "mitid" ikke eksisterer.

Koden ser pt. således ud:

function updateSubscribermitid($subscriber, &$subscriberId) {
global $database;

mosMakeHtmlSafe($subscriber);
$erro = new xerr( __FILE__ , __FUNCTION__ , __CLASS__ );
if ($subscriber->mitid >0 ) {
    $query = "UPDATE `#__acajoom_subscribers` SET ".
    " `name` = '$subscriber->name' , " .
    " `email` = '$subscriber->email' , " .
    " `receive_html` = $subscriber->receive_html  , " .
    " `confirmed` =  $subscriber->confirmed  , " .
    " `timezone` = '$subscriber->timezone' , " .
    " `language_iso` = '$subscriber->language_iso' , " .
    " `blacklist` = $subscriber->blacklist , " .
    " `params` = '$subscriber->params'  " .
    " WHERE `mitid` = $subscriber->mitid ";
    $database->setQuery($query);
    $database->query();
    $erro->err = $database->getErrorMsg();
} else {
    $subscriber->subscribe_date = acajoom::getNow();
    $erro->ck = subscribers::insertSubscriber($subscriber, $subscriberId);
    $erro->Eck( __LINE__ , '7625' );
}

return $erro->R();
}
Avatar billede jakobdo Ekspert
15. april 2007 - 21:48 #1
Du kunne overveje denne måde:
http://dev.mysql.com/doc/refman/4.1/en/insert-on-duplicate.html
Hvis du har mysql version 4.1.0 eller nyere.
Avatar billede daniel_d Nybegynder
15. april 2007 - 22:05 #2
Det lyder som en god ide, men er lidt i tvivl om hvordan mit query så skal stykkes sammen. Har du et bud på det?
Avatar billede daniel_d Nybegynder
15. april 2007 - 22:13 #3
Æv, desværre kører serveren mysql 3.23.49 så ovenstående er ikke en mulighed. Ærgeligt.
Avatar billede jakobdo Ekspert
15. april 2007 - 22:15 #4
Dette burde faktisk gøre det:

mosMakeHtmlSafe($subscriber);
$erro = new xerr( __FILE__ , __FUNCTION__ , __CLASS__ );
if ($subscriber->mitid >0 ) {
    $query = "INSERT INTO `#__acajoom_subscribers` (mitid,name,email,receive_html,confirmed,timezone,language_iso,blacklist,params)
    VALUES('','$subscriber->name','$subscriber->email','$subscriber->receive_html','$subscriber->confirmed','$subscriber->timezone','$subscriber->language_iso','$subscriber->blacklist','$subscriber->params')
    ON DUPLICATE KEY UPDATE" .
    " `name` = '$subscriber->name' , " .
    " `email` = '$subscriber->email' , " .
    " `receive_html` = $subscriber->receive_html  , " .
    " `confirmed` =  $subscriber->confirmed  , " .
    " `timezone` = '$subscriber->timezone' , " .
    " `language_iso` = '$subscriber->language_iso' , " .
    " `blacklist` = $subscriber->blacklist , " .
    " `params` = '$subscriber->params'  ";
    $database->setQuery($query);
    $database->query();
    $erro->err = $database->getErrorMsg();
Avatar billede jakobdo Ekspert
15. april 2007 - 22:16 #5
Crap, alt det kode til ingen verdens nytte! :o)

Så kan du kigge på denne løsning:

http://dev.mysql.com/doc/refman/4.1/en/replace.html
Avatar billede jakobdo Ekspert
15. april 2007 - 22:17 #6
Den vil opdatere en række hvis den findes i forvejen, eller vil den blive indsat.
Avatar billede daniel_d Nybegynder
15. april 2007 - 22:36 #7
Er ked af du ikke fit set min kommentar med DB version :o(

Men vil det sige at jeg blot kan erstatte min UPDATE med REPLACE INTO i mit query?
Avatar billede daniel_d Nybegynder
15. april 2007 - 23:28 #8
Jeg har fået det til at spille - jeg takker for din tid og energi :)
Smider du et svar?
Avatar billede jakobdo Ekspert
16. april 2007 - 08:04 #9
Svar!
Avatar billede jakobdo Ekspert
16. april 2007 - 10:00 #10
Takker for point.
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