Autor Zpráva
baldur
Profil *
Ahoj,
vytvářím php třídu pro zprostředkování komunikace s mysql (zatím má jen základní funkčnost), ale problém mi nastal, když jsem ji nahrál na server a snažil se připojit k více databázím - vytvořilo mi to zajímavý error: Access denied for user '>>Uživatel k databázi 2<<'@'%' to database '>>Název databáze 1<<'

Dělám to tak, že mám za sebou dva příkazy require, následovně:
require "setup_db1.php";  // Připojení k DB 1
require ".setup_db2.php";  // Připojení k DB 2

, kde obsah obou souborů je následující (s jinými názvy proměnných a údaji samozřejmě):
<?
  require_once "class.mysql.php";
  
  $SQL_Server = "server";
  $SQL_Uzivatel = "uzivatel";
  $SQL_Heslo = "heslo";
  $Database = "databaze";

  $mysql = new mysql($SQL_Server, $SQL_Uzivatel, $SQL_Heslo, $Database);
?>


A ve výsledku mám aktivní připojení jen k druhé databázi v pořadí (podaří se mi bez problému provést dotaz). Když se naopak zkusím připojit jen k jedné z nich, tak je vše v pořádku. To je důležité - potřebuju být připojen k oběma najednou. Jinak na localhostu to fungovalo v pořádku

Zde je odkaz na mysql třídu, kterou používám (prosím nešířit): www.bbin.own.cz/class.mysql.txt

Moc děkuji za jakýkoliv postřeh!
king26
Profil
přepisujěš si proměnnou $mysql? Pro každou databázi by měla být jiná proměnná

např.:
$mysql1 = new mysql();
$mysql2 = new mysql();
baldur
Profil *
Mám jinou proměnnou, jak jsem psal, v každém souboru jsou jiné proměnné, jen jsem tady nechtěl zbytečně uvádět oba soubory, které jsou takřka totožné :)
Mastodont
Profil
Access denied for user
To ukazuje na nějaký problém s přístupovými právy - Je správně jméno a heslo? Má ten uživatel práva k databázi (tabulkám)?
baldur
Profil *
Ano, jak jsem psal, když se připojuji k databázím jednotlivě, tak žádný problém není, to jen když se snažím o připojení k oběma zároveň. A taky ta chyba nedává smysl, jelikož říká že uživatel k první databázi nemá právo pro připojení k databázi druhé. Jako kdyby to zpřeházelo proměnné (ale každá má své vlastní jméno, tak to není možné). Chyba bude nejspíš v konstruktoru třídy, který se k databázi připojuje, ale nemůžu přijít na to jaká.
Nemohl by se na to někdo více znalý oop podívat?
Kajman_
Profil *
Možná to bude tím, že v metodě table_exists nepoužíváte identifikaci spojení.
baldur
Profil *
[#6] Kajman
Ano, to je pravda, ale zde problém nebude. Nejde se mi vůbec připojit. Tzn. k volání této metody ani nedojde. Jinak ale díky za připomínku, opravím to.
Kajman_
Profil *
Tak ještě by mohl být problém v používání self::$counter. Nemělo by být pro každou kombinaci (server, uživatel, heslo) samostatné počítadlo?
baldur
Profil *
No to je statická proměnná, právě že je potřeba ji mít jen jednu pro všechny instance, aby se zjistilo, jestli už je nějaké připojení k databázi aktivní (potom se nastaví poslední parametr mysql_connect na true. To už jsem odzkoušel, inkrementuje se správně, takže při druhé vytvořené instanci třídy se to nastaví správně na true.
Kajman_
Profil *
Jo to je fakt. Tak už mě napadá jen zkontrolovat, zda není zapnuté sql.safe_mode
baldur
Profil *
Nějak mi není úplně jasné co to dělá? A kde se to případně nastavuje? Je to nastavení serveru, nebo se to dá udělat i programově?
baldur
Profil *
Mohl bych někoho požádat, zda by neodzkoušel třídu uvedenou výše a nezkusil se s ní připojit k nějaké své databázi na serveru, jestli je to jinde v pořádku?
Děkuji předem!
Davex
Profil
V rychlosti jsem to vyzkoušel a zlobí mi to také.

Schematicky:
include('./setup_db1.php');
include('./setup_db2.php');

$data1 = $mysql1->select('*', 'tabulka'); // Access denied for user 'user2'@'%' to database 'db1'
$data2 = $mysql2->select('*', 'tabulka'); // OK

a Kajmanova rada [#6] to spravila.
baldur
Profil *
Tak safe_mode byl na serveru vypnutý a i když práva byla taky nastavená správně, tak to s největší pravděpodobností bylo jakýmsi nastavením, kdy se k oběma databázím dalo přistupovat s jedním uživatelským jménem) - tzn. v phpMyAdmin byly obě databáze přístupné v jednu chvíli, což není asi hlavní projev tohoto nastavení a umožnilo to i souběžné připojení k oběma db najednou.
Takže problém vyřešen! Děkuji všem za pomoc!

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