Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
Nemůžu přijít na to, proč se mi dovnitř funkce ulozitZaznam() nepředává vytvořené přípojení k DB? MySQL mi hlasí chybu 1146, což je neexistující tabulka a ukazuje to právě na problém, kdy "pripojeni_2" přebilo "pripojeni_1", protože proběhlo jako poslední.
Když uvnitř funkce vytvořím znovu "pripojeni_1" znvou, tak je to v pořádku. $pripojeni_1 = mysql_connect($server1, $user1, $pass1); ... $pripojeni_2 = mysql_connect($server2, $user2, $pass2); ... function ulozitZaznam($sql, $spojeni=1) { $res = mysql_query($sql, $GLOBALS["pripojeni_".$spojeni]); ... } ulozitZaznam("INSERT INTO...", 2); ulozitZaznam("INSERT INTO..."); |
||
lionel messi Profil |
#2 · Zasláno: 27. 1. 2016, 20:25:06
xlifer:
1. Správne sa píše $_GLOBALS["pripojeni_".$spojeni] .
2. $pripojeni_1 nikde nedefinuješ ako globálnu premennú.
|
||
xlifer Profil |
lionel messi:
„1. Správne sa píše $_GLOBALS["pripojeni_".$spojeni] .“
To platí pro GET, POST, SESSION, SERVER, REQUEST, FILES, ENV, COOKIE, ale na $GLOBALS určitě ne. Viz manual PHP: $GLOBALS lionel messi: „2. $pripojeni_1 nikde nedefinuješ ako globálnu premennú.“
Jak to? Hned na začátku je $pripojeni_1 = ... nebo to musí být jako $GLOBALS["pripojeni_1"] ? |
||
Joker Profil |
#4 · Zasláno: 27. 1. 2016, 20:30:43
xlifer:
Tohle je teda mimořádně ošklivý způsob, jak předávat data dovnitř funkce. Proč se tam nepředává jednoduše ta proměnná s tím připojením? |
||
xlifer Profil |
#5 · Zasláno: 27. 1. 2016, 20:34:07
Joker:
Souhlasím, může to být uděláno napřímo, ale je to pouze pracovní verze, nicméně to neřeší problém. Lepší? function ulozitZaznam($sql, $spojeni="pripojeni_1") { $res = mysql_query($sql, $GLOBALS[$spojeni]); ... } |
||
Lonanek Profil |
xlifer:
„Lepší?“ Ne. Osobně bych řešil: $pripojeni_1 = mysql_connect($server1, $user1, $pass1); ... $pripojeni_2 = mysql_connect($server2, $user2, $pass2); ... function ulozitZaznam($sql, $spojeni=0) { if ($spojeni == 0) { // nebyly zadany parametry pripojeni return false; } $res = mysql_query($sql, $spojeni]); ... } ulozitZaznam("INSERT INTO...", $pripojeni_1); ulozitZaznam("INSERT INTO...", $pripojeni_2); |
||
Joker Profil |
#7 · Zasláno: 27. 1. 2016, 21:32:56
xlifer:
„Souhlasím, může to být uděláno napřímo, ale je to pouze pracovní verze, nicméně to neřeší problém.“ Řeší, problém nebude vůbec existovat. Není důvod to tak dělat ani do pracovní verze, není to ani zjednodušení. Je to chybný návrh, který je ještě navíc pracnější, než ten správný. Funkce bude: function ulozitZaznam($sql, $spojeni) Jinak sice ten kód je jen ukázka, ale další poznámky: - mysql_* funkce jsou zastaralé a v novém kódu by se neměly používat. - Snad je to jen ukázka, ale ta funkce ulozitZaznam nedává moc smysl. Bude to víceméně alias pro mysql_query. |
||
xlifer Profil |
Joker:
„- mysql_* funkce jsou zastaralé a v novém kódu by se neměly používat.“ A co se používá v novém kódu? mysqli_* ? „…přičemž $spojeni bude ten resource objekt. Celá ta opičárna se skládáním řetězce a vytahováním z globálních proměnných tím odpadne.“ Takže jestli dobře chápu, tak když budu do funkce předávat přímo ten resource objekt, tak to bude fungovat bez problému, který řeším? Pokud ano, tak jsem konečně došel k závěru začátku, na co jsem se vlastně ptal :-) |
||
Martin2 Profil * |
#9 · Zasláno: 27. 1. 2016, 22:33:37
xlifer:
Zdá se, že tvoříš něco, co by mělo být řešeno objektově. Globální funkce bys posledních 10 let vůbec neměl potřebovat. Nikdy, na nic a za žádných podmínek. Možná bys mohl zkusit nějaký framework, vyřeší spoustu problémů s tvorbou závislostí. |
||
xlifer Profil |
Martin2:
„Zdá se, že tvoříš něco, co by mělo být řešeno objektově. Globální funkce bys posledních 10 let vůbec neměl potřebovat. Nikdy, na nic a za žádných podmínek.“ Nemyslím si, ale chápu vývoj doby, ale pak je k zamyšlení, proč funkce() zcela z nových verzí PHP nevypustí, když už je to tak 10 let mimo mísu, jak se říká... (Pokud jsi teda nemyslel globální proměnné?) Určitě záleží vždy na konkrétní situaci a projektu, osobně moc nepreferuji frameworky i když je to určitě skvělá výpomoc, ale vždy to dopadne tak, že framework řeší 100% oblasti, ale já s toho potřebuji třeba jen 5%, takže sebou tahám nářadí, které v projektu nepoužiju, ale můžu... Mám pocit, že dnes má spousta projektů naložen celý náklaďák nářadí a jezdí utahovat šrouby, takže by jim stačil malý kufřík se základním nářadím... |
||
Martin2 Profil * |
#11 · Zasláno: 27. 1. 2016, 23:13:47
xlifer:
„pak je k zamyšlení, proč funkce() zcela z nových verzí PHP nevypustí“ Rozumný vývoj nevytváří zpětné nekompatibility, když k tomu nemá důvod. To ale není argument takové vlastnosti používat v nových programech. „Pokud jsi teda nemyslel globální proměnné?“ Ne, myslel jsem globální funkce. Tedy funkce definované v globálním prostoru. „že framework řeší 100% oblasti, ale já s toho potřebuji třeba jen 5%,“ Framework řeší typicky propojení HTTP požadavku s objekty, které jej zpracují a objekty, které se starají o programovou logiku, zpracování dat a sestavení výsledku k zobrazení. To jsou činnosti, které potřebuje ke své funkci každá webová aplikace. „takže sebou tahám nářadí, které v projektu nepoužiju“ Starost amatérských PHP programátorů o zátěž serveru je až dojemná. Věz, že, pokud bychom brali v úvahu třeba Nette, je overhead kvalitního frameworku skoro neměřitelný. |
||
Keeehi Profil |
Martin2:
„Věz, že, pokud bychom brali v úvahu třeba Nette, je overhead kvalitního frameworku skoro neměřitelný.“ Navíc právě Nette bylo rozpadnuto do spousty menších projektů, takže pokud řešíš každý kilobajt tak si ho můžeš poskládat jen z těch částí, které vyuziješ. |
||
Časová prodleva: 8 let
|
0