Avatar billede Slettet bruger
14. november 2010 - 19:49 Der er 9 kommentarer og
2 løsninger

"Can't connect to local MySQL server through socket" efter ændring i opbygning

Hej

Jeg er i gang med at lave et system, hvor opbygningen hidtil har været sådan her:


index.php:
include("mainpage.php");
get_language("dk");
open_sql()
// Data fra DB hentes
close_sql()
echo $content;

mainpage.php:
session_start()
include("function_library.php");
include("sql_connection.php");

function_library.php:
function get_language($value) {
    open_sql()
    // Data fra DB hentes
    close_sql()
    return $data_fra_db
}

sql_connection.php:
function open_sql() {
    // Åben connection til DB
}

function close_sql() {
    // Luk connection til DB
}

Det har virket som det skulle.

Jeg har nu lavet følgende opbygning i stedet:

index.php:
  include("mainpage.php");
  get_language("dk");
  include("underside.php");
  open_sql()
  // Data fra DB hentes
  close_sql();
  echo $data_fra_db;

mainpage.php:
  session_start()
  include("function_library.php");
  include("sql_connection.php");

underside.php:
  get_language("dk");
  echo $data

function_library.php:
  function get_language($value) {
      open_sql()
      // Data fra DB hentes
      close_sql()
      return $data_fra_db
  }

sql_connection.php:
  function open_sql() {
      // Åben connection til DB
  }

  function close_sql() {
      // Luk connection til DB
  }

Den nye struktur kan jeg ikke få til at virke.
Når underside.php henter sprog (via funktionen i function_library.php), meldes der fejl:
Can't connect to local MySQL server through socket

Laver jeg en open_sql() i underside.php FØR jeg henter sproget, virker det som det skal.
Det vil dog kræve mange ændringer i den opbygning jeg ellers har, så det er jeg ikke videre interesseret i.

Er der nogen der kan fortælle mig hvad der går galt? Jeg synes det ligner noget include/require der gør at min nye opbygning fejler.
14. november 2010 - 20:05 #1
Hvad hvis du bytter om paa tredje og fjerde linie i din aendrede index.php, altsaa

open_sql();
include("underside.php");

Som det er nu ser de ud til at du proever at hente sprogene i 'underside.php' foer du aabner for datatabsen
Avatar billede Slettet bruger
14. november 2010 - 20:10 #2
Det er det der er det underlige. Så virker det. Det virker også hvis jeg flytter open_sql() op foran i underside.php.

Det må være en grund til at funktionen ikke kan finde ud af at åbne databasen, men det er netop det jeg ikke selv kan gennemskue.
14. november 2010 - 20:17 #3
Som jeg forstaar dig, naar du kalder funktionen open_sql() saa aabnes databasen.  Er det korrekt?  Jeg synes ikke det er saa underligt at systemet ikke kan udfoere 'include("underside.php")' naar du kalder den foer du kalder 'open_sql()'  Og giver det et problem at kalde 'open_sql()' foer du kalder 'include("underside.ph")'
Avatar billede Slettet bruger
14. november 2010 - 20:25 #4
Hm, tror ikke jeg har forklaret mig rigtig så.

I den gamle opbygning, afvikles de forskellige linjer noget ala dette:

Index.php
  include("mainpage.php");
    session_start()
    include("function_library.php");
    include("sql_connection.php");
  get_language("dk") (sprog til index.php hentes);
    open_sql();
    //Data fra DB hentes
    close_sql();
    return $data_fra_db;
  open_sql;
  //Data fra DB hentes
  close sql;
  echo $content

I den nye struktur gøres således:
Index.php
  include("mainpage.php");
    session_start()
    include("function_library.php");
    include("sql_connection.php");
  get_language("dk"); (sprog til index.php hentes)
    open_sql();
    //Data fra DB hentes
    close_sql();
    return $data_fra_db;
  include("underside.php");
    get_language("dk"); (sprog til underside.php hentes)
      open_sql();
      //Data fra DB hentes
      close_sql();
      return $data_fra_db;
    echo $content
  open_sql;
  //Data fra DB hentes
  close sql;
  echo $content
Avatar billede Slettet bruger
14. november 2010 - 20:40 #5
Jeg prøver lige igen med lidt flere indrykninger:

[code]
Index.php
    include("mainpage.php");
        session_start()
        include("function_library.php");
        include("sql_connection.php");
    get_language("dk") (sprog til index.php hentes);
        open_sql();
        //Data fra DB hentes
        close_sql();
        return $data_fra_db;
    open_sql;
    //Data fra DB hentes
    close sql;
    echo $content
[/code]


Den nye opbygning:
[code]
Index.php
    include("mainpage.php");
        session_start()
        include("function_library.php");
        include("sql_connection.php");
    get_language("dk"); (sprog til index.php hentes)
        open_sql();
        //Data fra DB hentes
        close_sql();
        return $data_fra_db;
    include("underside.php");
        get_language("dk"); (sprog til underside.php hentes)
            open_sql();
            //Data fra DB hentes
            close_sql();
            return $data_fra_db;
        echo $content
    open_sql;
    //Data fra DB hentes
    close sql;
    echo $content

[/code]
14. november 2010 - 21:54 #6
Du tror du ikke har forklaret dit tydeligt.  Det kan gerne vaere.  Det jeg har forstaaet at problemet der dette: "Når underside.php henter sprog (via funktionen i function_library.php), meldes der fejl: Can't connect to local MySQL server through socket".  Har jeg forstaaet korrekt at det er problemet?

Hvis ja, saa tror jeg du har forklaret dig tydeligt, men maaske er det mig der ikke har forklaret mit indlaeg tydeligt.  Jeg observerer at sql forbindelsen IKKE ER AABEN naar du kalder 'underside.php' og at det er en logisk forklaring paa fejlmeldingen!  I den kode du viser i dit oprindelige spoergsmaal er sql forbindelsen endnu ikke aaben naar du kalder 'include("underside.php")'  I den kode du viser i #5 aabner du foerst sql forbindelsen, men saa lukker du den igen inden du kalder du 'underside.php'.

Venligst fortael mig (1) om det er tydeligt hvad jeg siger, (2) om det er mig der ser syner og sql forbindelsen er aaben paa rette tid (i saafald vis mig hvordan), (3) hvad problemet ville vaere med at soerge for at 'open_sql() kaldes foer 'include("underside.php")'.
Avatar billede Slettet bruger
15. november 2010 - 08:18 #7
Jeg forstår godt hvad du siger, men det er ikke korrekt.

Som du kan se ovenfor bruges open_sql() i funktionen der hentes sprog.

I det nuværende setup er det filen (index.php) der inkluderer både funktion og sql-funktion, der kalder sprog-funktionen.

I det nye setup kommer der et led mere imellem.
Index.php inkluderer funktion og sql-funktion, for herefter at inkludere underside.php, der kalder funktionen.

Min mistanke er at det er den ekstra inkluderet side der ligger imellem, der giver problemerne.

Mit problem med at sætte open_sql ind, er at jeg har en masse andre sider der også bruger funktionerne, og det vil kræve ændringer i alle undersider, såfremt jeg fjerner open_sql fra sprog-funktionen, hvilket jeg ikke ønsker.

Jeg vil gerne finde ud af hvad det er der gør at det ikke virker, ikke bare for at få mit problem løst, men også for at lære mere omkring hvad der skaber problemet.
15. november 2010 - 18:08 #8
Jeg var lidt haengt op idag - jeg fik kikket paa dit sidste indlaeg men ikke reageret.  Jeg godt se nu fra #5 at du i undersiden kalder open_sql() foer du henter data.  Men jeg er lidt tabt med hensyn til hvad problemet er. 

Siger du at det virker som vist i #5 (du kalder open_sql() i undersiden foer du henter data) men at du ville foretraekke kalde open_sql() i hovedfilen foer du kalder include(underside) hvilket uheldigvis ikke virker?

Eller siger du modsat at det virker hvis du i hovedfilen kalder open_sql() foer du kalder include(underside) men at du vil foretraekke at aabne sql i undersiden men det virker ikke?

Og hvad siger du saa er ulempen ved den maade de virker paa?
Avatar billede Slettet bruger
15. november 2010 - 20:06 #9
Problemet var at jeg fik en fejl når jeg ændrede på opbygningen af mine sider.

Jeg har rodet med det her til aften, og fundet frem til at det var nogle nestede funktioner, der ikke havde adgang til databasen.

Efter de blev rettet til, virkede alt som forventet.

Læg et svar og halvdelen af pointene er dine for din deltagelse i tråden.
15. november 2010 - 20:23 #10
Jamen det var jo det jeg lurede paa, at open_sql() ikke var aaben paa de rette tidspunkter.  Men til lykke med at det er loest.  Her er svar fra mig.
Avatar billede Slettet bruger
15. november 2010 - 20:30 #11
Jeg havde selv gættet på at det var brugen af variabler på tværs af de inkluderede sider der ikke fungerede som forventet.

Tak for input.
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