Autor | Zpráva | ||
---|---|---|---|
wabi Profil * |
Zdravím, napsal jsem si jednoduchou třídu pro připojení k databázi a potřebuji se připojit zároveň ke dvěma různým databázím. Na localhostu to fungovalo skvěle, ale jak jsem to nahrál na server, tak mi to nefunguje a nechápu proč. Tady je konstruktor té třídy:
public function __construct($server, $user, $pass, $database, $encoding = "utf8") { self::$counter++; if($this->connect==null) { if(self::$counter>1) { $new_link = true; } else { $new_link = false; } if($this->connect = MySQL_Connect($server, $user, $pass, $new_link)) { mysql_select_db($database, $this->connect); $this->execute("SET NAMES '"+$encoding+"'"); $this->server = $server; $this->user = $user; $this->password = $pass; $this->database = $database; $this->encoding = $encoding; return true; } else { echo "Error while connecting database!"; } } } A tady je to samotné připojení k databázi: $SQL_server = "server1"; $SQL_user = "user1"; $SQL_pass = "pass1"; $Database = "database1"; $mysql = new mysql($SQL_server, $SQL_user, $SQL_pass, $Database); $SQL_server2 = "server2"; $SQL_user2 = "user2"; $SQL_pass2 = "pass2"; $Database2 = "database2"; $mysql2 = new mysql($SQL_server2, $SQL_user2, $SQL_pass2, $Database2); To divný na tom je, že mi to hlásí tenhle error: Access denied for user 'user2'@'%' to database 'database1' Když se zkouším připojit jenom k první databázi, tak to funguje normálně, jenom když jsou tam obě, tak to dělá problémy. Tady je ještě odkaz na celou třídu (prosím nešířit): http://pastie.org/private/1gzaojkia7isaasmaymqq |
||
Alphard Profil |
#2 · Zasláno: 16. 7. 2011, 00:25:25
Na jakém řádku to hlásí tu chybu, 48. s mysql_select_db()? Jestli se tam dostává špatná hodnota, tak by mělo být snadné najít příčinu, třeba i pomocí debug výpisů.
|
||
wabi Profil * |
#3 · Zasláno: 16. 7. 2011, 08:57:47
Na žádném řádku to chybu nehlásí - to co jsem napsal je celé znění chyby kterou vždycky dostanu. Když se navíc snažím třeba získat nějaká data z databáze, tak mi to hlásí chybu na řádku (v příloze je to řádek) 120 - tzn. příkaz mysql_fetch_array(), ale to jenom proto že místo mysql zdroje dostane jako parametr boolean (false), jelikož se nezvládl provést příkaz pro připojení a vykonání dotazu.
|
||
Alphard Profil |
#4 · Zasláno: 16. 7. 2011, 10:26:48
Mně se teda podařilo s vaší třídou navázat dvě spojení a výtáhnout z obou databází data.
$SQL_server = "localhost"; $SQL_user = "root"; $SQL_pass = "gH83"; $Database = "pb_beta"; $mysql = new mysql($SQL_server, $SQL_user, $SQL_pass, $Database); $SQL_server2 = "localhost"; $SQL_user2 = "root"; $SQL_pass2 = "gH83"; $Database2 = "examles_01"; $mysql2 = new mysql($SQL_server2, $SQL_user2, $SQL_pass2, $Database2); $r = $mysql2->select('*', 'gama'); print_r($mysql2->fetch($r)); $r = $mysql->select('*', 'entries'); print_r($mysql->fetch($r)); print_r($mysql->fetch($r)); print_r($mysql->fetch($r)); print_r($mysql->fetch($r)); Na první pohled tam nevidím chybu, která by způsobovala popsané chování. Na druhou stranu, je tam pár jiných např. public function select($cols = "*", $table, $cond = null, $order = null, $options = null, $join = null) { Pokud jde o třídu samotnou, ani neescapujte dosazené hodnoty, jen trochu zjednodušuji syntaxi, znáte třeba dibi? Můžete se inspirovat, nebo přímo použít. |
||
wabi Profil * |
#5 · Zasláno: 16. 7. 2011, 11:00:40
[#4] Alphard To je právě to, že na localhostu mi to fungovalo taky v pohodě, ale jakmile jsem to nahrál na server, tak to není schopné vytvořit více instancí téhle třídy.
Jinak ale díky za tipy, tohle je moje první třída v php, takže se na tom spíš učím oop apod. Určitě se podívám na odkaz a postupně budu třídu vylepšovat. |
||
Alphard Profil |
#6 · Zasláno: 16. 7. 2011, 11:35:34
wabi:
„Když se zkouším připojit jenom k první databázi, tak to funguje normálně, jenom když jsou tam obě, tak to dělá problémy.“ A k druhé se samostatně přihlásíte? |
||
wabi Profil * |
#7 · Zasláno: 16. 7. 2011, 11:52:53
Tak už je to vyřešeno - server jednoduše nepodporuje simultánní připojení k více databázím najednou. Takže můžu se připojit k první, poté ukončit připojení a připojit se k druhé. Jinak to nejde, takže to bohužel není programátorská otázka, ale spíš otázka změny hostingu.
Mohl bych tohohle vlákna případně využít i k ohodnocení té třídy? Jestli by jsi k tomu neměl ještě nějaké připomínky, abych mohl třídu vylepšit? - Například o odchytávání chyb se tam prozatím vůbec nestarám, zatím nevím jaký přístup k tomu mám zvolit atp. Každopádně díky! |
||
Časová prodleva: 13 let
|
0