Avatar billede daniel_d Nybegynder
13. april 2007 - 15:11 Der er 5 kommentarer

Tjekke om værdi findes i DB, ellers opdater

Hej eksperter

Jeg sidder med lidt kode der gør bøvl. Kort fortalt skal jeg opdatere en database og hvis en bestemt værdi (id) findes i forvejen skal den opdateres ikke oprettes på ny.

Mit problem er denne kode som er delvis psuedokode
Det er i linje 2 jeg har problemer - den skal her tjekke om mitid allerede findes og hvis ikke skal der indsættes i db

if($subscriber->mitid > 0){
    if (exists($subscriber->mitid));
        subscribers::insertSubscribermitid($subscriber, $subscriberId);
    else {
        subscribers::updateSubscribermitid($subscriber, $subscriberId);
    }
}

Hilfe :)
Avatar billede daniel_d Nybegynder
13. april 2007 - 15:12 #1
Hov - det skulle være sådan her:

if($subscriber->mitid > 0){
    if (exists($subscriber->mitid));
        subscribers::updateSubscribermitid($subscriber, $subscriberId);
    else {
        subscribers::insertSubscribermitid($subscriber, $subscriberId);
    }
}
Avatar billede olebole Juniormester
13. april 2007 - 15:24 #2
<ole>

Du prøver først at indsætte, men undertrykker evt. fejl med et '@':
    $res = @mysql_query(MYSQL_INSERT_STRENG);

Hvis et af felterne er unikt, vil der - hvis værdien allerede findes i DB'en - opstå en fejl, som du kan aflæse med mysql_errno(). Jeg mener det er 1062 (eller 1068 - test selv), der dækker den aktuelle fejl:

    $res = @mysql_query(MYSQL_INSERT_STRENG);
    if (mysql_errno()=1062) {
        $res = @mysql_query(MYSQL_UPDATE_STRENG);
    }

/mvh
</bole>
Avatar billede olebole Juniormester
13. april 2007 - 15:25 #3
Ooooops ... to lighedstegn ved sammenligning  ;o)
    if (mysql_errno()==1062) {
Avatar billede daniel_d Nybegynder
13. april 2007 - 15:43 #4
Hej olebole
Tak for hurtigt svar. Jeg har fundet frem den egentlige kode der indsætter i db'en. Måske du kan se hvor jeg skal sætte ind her. Pt. kigger den kun om mitid eksisterer og hvis det gør så opdaterer den tabellen. Det der mangler er som sagt at indsætte nye rækker i db'en hvis mitid ikke allerede eksisterer.

her er kodestumpen:

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 daniel_d Nybegynder
15. april 2007 - 18:17 #5
Ole -> smid et svar. Jeg prøver at oprette et nyt spm omkring det konkrete query
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