Gå til innhold

Anbefalte innlegg

Driver å lager et Perl script som bruker mysql.

Det er et utlåne system for diverse utstyr, og alt har gått fint til nå.

Har uheldigvis støtt på et lite problem som ikke skal være vanskelig å løse, men min erfaring med mysql og database bruk generelt er heller dårlig, siden jeg har drevet med flat-file bruk.

 

$sth = $dbh->prepare("replace items where nummer=$nummer (nummer, navn, dato, levere, xbox, kontrollere, gigabit, switch, nettverkskabler, spill, tilbakelevert) values(nummer,navn,dato,levere,xbox,kontrollere,gigabit,switch,nettverkskabler,spill,?) ") or &feilmelding;

 

Får error på denne, og vet rett og slett ikke hvordan jeg skal løse problemet. Har søkt og letet overalt, men finner ikke det som kan gjøre akkurat det jeg vil.

Som sagt, har jeg veldig liten erfaring med mysql, så løsninga er ikke så enkel. Har ei bok som jeg bruker hvor det står en del eksempler, og det står hvordan jeg kan erstatte innhold, men ikke hvis jeg har flere linjer med innhold i databasen. Altså mer enn et innlegg. Jeg skal bare erstatte tilbakeleverings variabelen her, så burde da være enkelt.

 

Setter pris på hvis noen kan dytte meg i riktig retning. Takk.

Lenke til kommentar
Videoannonse
Annonse

SQL-koden din skal være

replace items values ($nummer, $navn, $dato, $levere, $xbox, $kontrollere, $gigabit, $switch, $nettverkskabler, $spill, $tilbakelevert)

hvor $xxx er perl-variablene som inneholder de nye verdiene. Merk at navnet på variablene har ingen betydning så de må oppgis i den rekkefølgen de er oppgitt i MySQL-tabellen. replace vil da erstatte databaserader som allerede har den primære/unike nøkkelen som de nye verdiene har.

Lenke til kommentar

Siden det er slik det forholder seg, så skal du heller bruke update:

update items set tilbakelevert=true where nummer=$nummer

Dette forutsetter at du har en tabell som heter items med to felt, nummer og tilbakelevert. Feltet nummer antar jeg er en primærnøkkel. $nummer er variabelen som perl-skriptet ditt skal sette inn.

 

Koden vil da søke frem til alle rader som har det oppgitte nummer og oppdatere tilbakelevert-verdien til true.

 

Siden jeg antar nummer er primærnøkkel, så betyr det at det aldri vil bli mer enn en linje som endres.

 

Du kan lese mer om update i MySQL-dokumentasjonen.

 

Håper dette hjelper deg videre. Hvis du har flere spørsmål kan det være praktisk om du også oppgir tabellstrukturen din slik at antall antagelser kan reduseres.

Lenke til kommentar

Tusen takk, Floppy!

Nummer er primærnøkkelen, som er unik hvor den øker for hver linje.

Tabellstrukturen min er vel den jeg postet tidligere:

$nummer, $navn, $dato, $levere, $xbox, $kontrollere, $gigabit, $switch, $nettverkskabler, $spill, $tilbakelevert

Altså Nummer - Navn - Dato osv.

Tror det skal funke det du sier. Skal prøve ihvertfall!

Databaser er ganske genialt, du må bare bli kjent med systemet først. Er en helt annen verden enn flat-file livet jeg har levd til nå. Hadde ikke mulighet til å bruke mysql før jeg fikk egen server, og det er først nå, et år etter at jeg fikk den at jeg faktisk har skjønt at jeg har ubegrenset med database plass! :!:

 

Skal si ifra hvis det er noe som ikke virker. Takk igjen.

Lenke til kommentar

Burde kanskje postet dette i perl forumet, siden jeg hopper bittelitt off-topic på denne, men har du peiling hvorfor dette ikke funker?

 

$sth = $dbh->prepare("update items set tilbakelevert=true where nummer=$nummer) or &feilmelding;

$sth->execute($nydato) or &feilmelding; 

 

Var litt usikker på den tilbakelevert=true. Skal jeg erstatte true med noe, eller skal den stå?

Lenke til kommentar

Du sier ikke hva slags feilmelding du får, men jeg får prøve...

 

Perl er ikke min sterke side, men mangler du ikke avsluttende anførselstegn rundt sql-uttrykket?

 

En annen ting er at konstanten true ikke ble innført i MySQL før versjon 4.1. Hvis du bruker en eldre versjon av MySQL kan du erstatte true med den konstante tallverdien 1 (forutsatt at feltet er av passende type).

 

Og med tabellstrukturen din, så tenkte jeg på de vesentlige delene av tabelldefinisjonen (altså felter, typer og nøkler). Hva slags type er feltet tilbakelevert?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...