15. december 2006 - 10:21Der er
12 kommentarer og 1 løsning
Dilemma: Persistent connections og stored procedures?
Jeg arbejder på et website med der benytter mysql_pconnect og almindelige databaseforespørgsler. Nu vil jeg imidlertid igang med at benytte stored procedures i mysql og kalde dem fra php. Men mysql_query("call someprocedure()") virker ikke umiddelbart.
Jeg kan få det til at virke, ved at smide det fjerde parameter på mysql_pconnect:
mysql_pconnect("localhost","user","pass",65536)
Men hvis jeg gør det, kan jeg ikke længere lave almindelige forespørgsler.
Jeg har så kigget på mysqli, men den understøtter ikke persistent connections.
Så spørgsmålet er: Hvordan kan jeg fortsætte med at bruge persistent connections og afvikle både almindelige forespørgsler og stored procedures?
Glemte lige at nævnte, at løsningen naturligvis ikke må gå på kompromis med performance. Jeg har tidligere forsøgt at benytte mysql_connect, men det var ingen success, og derfor er jeg ikke meget for at benytte mysqli.
Jeg er ikke klar over om performance bliver dårligere hvis jeg skifter fra mysql til mysqli uden persistent connections. Jeg har googlet en del (faktisk lige nøjagtig den søgning du foreslår), men synes ikke jeg har fundet en entydig konklusion...
"Jeg er ikke klar over om performance bliver dårligere hvis jeg skifter fra mysql til mysqli uden persistent connections" Det kan komme an på mange ting. Grunden til at vælge persisten connection er hvis arbejded (eller 'overhead' som man siger) med at oprette database forbindelsen er tung eller f.eks. sker meget ofte. To ting jeg umiddelbart ville kigge på 1) er databasen på samme maskine som webserveren 2) er hårdt belastet er webserveren Er begge to tilfældet ville jeg overveje persistent connection ellers ser jeg ingen grund til det. For funktions mæssigt vinder du ingen ting ved persisten connection det er kun performance. Tværdigmod kan du ende i uheldige situationer.
Ja, databasen er på samme maskine og er til tider hårdt belastet. Vil det sige at konklusionen er enten eller? Enten bruger jeg almindelige db-forespørgsler eller også skifter jeg det hele ud med stored procedures?
Jeg kan jo ikke gøre begge dele på én gang... medmindre jeg laver 2 forbindelser til hvert request, og det kan heller ikke være smart set med performance-øjne.
Syntes det lyder lidt mærkeligt at man ikke kan kalde begge typer queries med persisten connection. Men bortset fra det saa ville jeg nok benytte mig af none persistent connections til databasen.
onkel_satan: Ja, du har ret det lyder mærkeligt... jeg har lige forsøgt igen, og nu virker det :-) Tak for hjælpen... der er point på vej til dig, hvis du lige smider et svar...
Grunden til at det virkede for mig var at jeg afviklede en almindelig forespørgsel FØR en stored procedure. Hvis man vil afvikle en almindelig forespørgsel EFTER et kald til en stored procedure, skal man bruge mysql_free_result.
Min konklusion før var forkert... php og stored procedures er åbenbart ikke helt kompatible endnu, iht. diverse bug-reports (Google: "stored procedure" "Lost connection to MySQL server during query").
Hvis man vil være sikker på det virker, skal man undlade at returnere et resultat, men istedet give returværdierne til sessionsvariabler (i mysql) som man selecter efter proceduren er kaldt:
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.