Avatar billede tilbageblik Nybegynder
06. oktober 2004 - 14:09 Der er 10 kommentarer og
1 løsning

To skrivninger i én kommando?

Hej, alle I kloge hoveder :)

Forestil jer, at jeg via en formular får samlet en flok oplysninger, som skal sendes ind i databasen. Er det muligt at sende nogle af disse oplysninger ind i én tabel og andre af dem ind i en anden - med én query?

Tanken i mit hovede er med andre ord noget i retning af:

(fordansket version af den query, jeg gerne vil køre)
"INDSÆT (bla1, bla2, bla3) VÆRDIERNE ('$bla1','$bla2', '$bla3') I tabel1 OG INDSÆT (bla4, bla5) I tabel2 VÆRDIERNE ('$bla4', '$bla5')";

Jeg kan tilføje, at den formular, hvori oplysningerne skrives benytter METHOD=POST og ACTION=fil-der-skriver-til-databasen.php. Selve queryen skal altså ligge i det dokument, der aktiveres fra formularen...

Kort version: Kan ovenstående lade sig gøre i én query, eller skal der to til? - Stadig i samme dokument. Hvis der skal to til for at udføre arbejdet, hvordan griber jeg så det an?

På forhånd tak for hjælpen - og jeres tid ;)
Avatar billede fsconsult.dk Nybegynder
06. oktober 2004 - 14:17 #1
du kan formentlig slippe afsted med at sende to inserts afsted til databasen adskilt af et semikolon.

det er bare en rigtig dårlig ide at sende queryen som felt fra formen og direkte til databasen, da det tillader at sende hvilken-somhelst query streng til din database, og få den udført...
Avatar billede arne_v Ekspert
06. oktober 2004 - 14:22 #2
Nogle sprog/API'er tillader flere SQL sætninger med et kald.

Jeg ved ikke om PHP mysql_ gør (din sætning ligner PHP).

Men hvorfor ?

Jeg tror ikke på nogen nævneværdig performance forskel.

Og hvis vi snakker data integritet, så bør du skifte fra MyISAM til InnoDB tabeller
og udføre de 2 INSERT i en enkelt transaktion (og det kan man sagtens i 2 kald).

Og fs har naturligvis helt ret i at du skal gøre noget for at undgå SQL injection.

I andre sprog kan man bruge parameters (kaldet prepared statement i Java).

I PHP mener jeg at man plejer at bruge noget strip/add slashes/quotes halløjsa.

[jep - jeg er ikke PHP programmør]
Avatar billede tilbageblik Nybegynder
06. oktober 2004 - 14:24 #3
Det prøver jeg i aften, når tiden er der til det :) - Indtil videre tak. Jeg vender tilbage og jamrer, hvis det ikke virker ;) Virker det, får du point på en studs.

Queryen bliver ikke sendt som felt fra formularen som sådan - bare rolig. Formularens action er et selvstændigt php-dokument, hvori al kommunikation med db'en foregår. Princippet er jo dybest set identisk med fx. at hente en menu-fil ind i et andet for at generere navigation eller lignende.
Avatar billede tilbageblik Nybegynder
06. oktober 2004 - 14:30 #4
Ovenstående kommentar var naturligvis til fsconsult.dk - den smuttede i farten.

Der er iøvrigt tale om php, ja ;)

arne_v:
Skifte fra MyISAM til InnoDB..? Hvad er forskellen, og vil det evt. betyde, at jeg kan køre begge "skrivninger" i én sql-query?

Du nævner, at jeg skal udføre de to INSERT i en enkelt transaktion... Lad mig lige være tumpet her og se, om jeg forstår dig ret: Du siger, at min oprindelige tanke i så fald er mulig, eller? :) - Eller er det under alle omstændigheder smartere at lave to "selvstændige" INSERTs/kald, stadig i samme dokument (fil-der-skriver-til-databasen.php)?
Avatar billede arne_v Ekspert
06. oktober 2004 - 14:36 #5
MyISAM->InnoDB og 1 transaktion med 2 INSERT har ikke noget med antal kald
at gøre.

Men hvis du gør det påd en måde så garanterer MySQL at: enten bliver begge
INSERT udført eller så bliver ingen af dem udført.

D.v.s. at du forhindrer at den første går godt og så fejler den anden og
din database efterlades i en måske uheldig tilstand.
Avatar billede tilbageblik Nybegynder
06. oktober 2004 - 14:50 #6
arne_v:
Ok, på dén måde :D Herligt, man kan få tingene ind med ske. Tak for det - kigger som sagt på det i aften, når tiden er der til det, og så vender jeg tilbage og smider med point, hvis det virker ;)
Avatar billede tilbageblik Nybegynder
07. oktober 2004 - 01:05 #7
arne_v:
Tak for hjælpen - det virker :) Smid et svar og få dine point.
Avatar billede arne_v Ekspert
07. oktober 2004 - 09:23 #8
kommer her
Avatar billede tilbageblik Nybegynder
07. oktober 2004 - 19:03 #9
Hopla :)
Avatar billede tilbageblik Nybegynder
07. oktober 2004 - 19:03 #10
?! - Når jeg klikker på Accepter, sker der ingenting..?
Avatar billede tilbageblik Nybegynder
07. oktober 2004 - 19:04 #11
Æhm....stryg den sidste kommentar :D - Point uddelt. Hehe.
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
Computerworld tilbyder specialiserede kurser i database-management

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



IT-JOB

Udviklings- og Forenklingsstyrelsen

Webanalytiker til digitale løsninger

Sund & Bælt Holding A/S

IT Change & Release Manager

Metroselskabet og Hovedstadens Letbane

Cyber Security Konsulent

Politiets Efterretningstjeneste

Netværks- og/eller firewallspecialister til PET