09. marts 2008 - 13:25Der er
13 kommentarer og 1 løsning
Skriver kun 0'er til db'en?!
Hej eksperter,
Jeg forstår simpelthen ikke hvad der er galt med min database, da det er noget der er opstået for ganske nylig. Den skriver simpelthen kun 0'er ind i databasen. Er der nogen der har en idé om hvad det kan skyldes?
Jeg kan lige komme med nogle flere detaljer: *) Det kan godt lade sig gøre at sætte data ind via phpMyAdmin. *) Der opstår ingen SQL fejl, men den fylder kun 0'er ind. *) Hvis jeg forsøger at skrive min sql ud lige inden den bliver eksekveret, så ser den f.eks. sådan her ud: INSERT INTO emails VALUES ( session = 356, type = 2, mailtext = "'[fjernet fra eksemplet]'", sent = NOW() ) Og ja, det bliver så til en række der ser sådan her ud: 0, 0, 0, 0000-00-00 00:00:00 *) Jeg kan stadig lave updates til databasen, og den selv samme sql som jeg bruger her, virker et andet sted i systemet.
Ja, nogen der har nogen idé om hvad der kan være galt?
Nej, det prøvede jeg, det virkede ikke. Men nu fandt jeg selv fejlen. Der er var forsvundet et " tegn. Jeg aner ikke hvordan det er sket, den må have været der før, for den har virket upåklageligt over 100 gange.
@erikjacobsen: beklager, men det er altså korrekt, for med tilføjelsen af det manglede " så virker det korrekt igen.
Men det undrer mig så hvorfor det ikke har gevet en syntax fejl og bare har skrevet 0'er ind i db'en istedet?
Jamen, nej. Den SQL-sætning du viser i spørgsmålet kan ikke andet end sætte 0-er (og sommetider 1-er) ind. Det er ikke måden at indsætte værdier i felter i en tabel - med mindre de skal være 0, og så ville der nok være en bedre måde at gøre lige det på ;)
Øv, jeg ved ikke lige hvad det er med Opera, men den skriver kun min kommentar ind hver anden gang eller noget i den stil.. :-/ Så jeg prøver lige igen.
@erikjacobsen: Det har du da ret i, det går rigtig godt for mig med at se mig blind på ting lige nu. Jeg testede med din løsning, og det virkede ikke, så ville jeg gå tilbage til min gamle løsning, og så rette det med " tegnet der manglede, men det må jeg åbenbart ikke have gjort. Så ja, de to rettelser tilsammen fik det til at virke.
Hvordan koden så er blevet så forkert det fatter eg ikke, for jeg har skrevet over 100 rækker ind i db'en med den metode som det her er fra, og jeg plejer at følge "don't fix something that ain't broken". :)
Men ja, du havde så hjulpet mig med at løse den, så jeg beklager at jeg bare tog points'ne selv, og lavede derfor et nyt spørgsmål som du kunne svare på for at få dine points. thesurfer har så lige forklaret at du ikke skal have points så det går da bare rigtig godt for mig idag.. ;)
Jeg overvejede dog også om du var en af dem der ikke tog mod point, men ville ikke spørge, da det at sige "du kan få point hvis du vil have nogen" implicit siger at jeg ikke vil af med dem, og det ville jeg jo nødig have det til at lyde sådan.. ^^
Men mange tak for hjælpen i hvert fald!
Lige en follow up på fejlen: Jeg forstår stadig ikke hvorfor det ikke gav en syntax fejl. For det første vidste jeg ikke at man kunne bede MySQL om at sammenligne to ting og indskrive resultatet, og kan heller ikke se grunden til det, når man lige så godt kan gøre det på laget ovenover (i det her tilfælde i PHP); men ok, det er så fedt nok at den metode er her, men hvorfor det så virker med et DateTime felt, det fatter jeg ikke. ^^
Altså, hvem kan have brug for at sammenligne et tekstuelt udtryk med et klokkeslæts tekstuelle værdi hvorefter at skrive det ind i DateTime tabellen som en række 0'er? (Hvad ville der foriøvrigt ske hvis resultatet havde været 1?)
Om det virker eller ikke i Opera er nok ikke noget med SQL-sætningen.
Om man har brug for at kunne lave en sammenligning på det sted i en SQL-sætning? Næh, det har man nok ikke, men man kan jo skrive et generelt udtryk på det sted, og derfor også en sammenligning.
Og en sammenligning med 0, fx. session = 0 vil være sandt og indsætte et 1-tal ;)
Nej det med at virke, det var at skrive her på eksperten.dk. En gang imellem bliver mit indlæg simpelthen ikke lagt op på siden når jeg trykker på "Send". Var bare derfor der ikke var nogen forklaring her på at jeg havde lavet et nyt spørgsmål til points'ne.
Jeg kan selvfølgelig godt se det med sammenligningen, idet den løser udtrykket før den sætter ind i databasen, men hvad hvis jeg havde forsøgt at sætte et 1-tal ind i DateTime, ville den kunne det? Det var bare mere det, at det generede mig at der ikke kom nogen fejl fra SQL, så jeg ledte et helt forkert sted efter problemet. :)
Ja, hvis du sætter et 1-tal ind i en datetime, så får du et en sjov dato - tæt på det samme som med 0.
Synes godt om
Ny brugerNybegynder
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.