Autor | Zpráva | ||
---|---|---|---|
baldur Profil * |
#1 · Zasláno: 29. 11. 2011, 23:04:43
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 |
#2 · Zasláno: 29. 11. 2011, 23:19:03
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 * |
#3 · Zasláno: 29. 11. 2011, 23:24:17
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 |
#4 · Zasláno: 30. 11. 2011, 00:20:58
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 * |
#5 · Zasláno: 30. 11. 2011, 08:45:31
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 * |
#6 · Zasláno: 30. 11. 2011, 08:54:23
Možná to bude tím, že v metodě table_exists nepoužíváte identifikaci spojení.
|
||
baldur Profil * |
#7 · Zasláno: 30. 11. 2011, 14:41:04
[#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 * |
#8 · Zasláno: 30. 11. 2011, 15:07:31
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 * |
#9 · Zasláno: 30. 11. 2011, 15:22:28
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 * |
#11 · Zasláno: 30. 11. 2011, 15:57:26
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 * |
#12 · Zasláno: 1. 12. 2011, 22:37:49
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 |
#13 · Zasláno: 1. 12. 2011, 23:41:24 · Upravil/a: Davex
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 * |
#14 · Zasláno: 2. 12. 2011, 13:29:56
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! |
||
Časová prodleva: 13 let
|
0