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
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 *
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
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) {
Výchozí hodnoty mohou být logicky až za povinnými parametry. Překvapilo mě, že PHP nevyhodí žádnou chybu.

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 *
[#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
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 *
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!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0