pripojenie k databaze: PDOException #1045

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
srobowak
Člen | 27
+
0
-

Zdravim, pri pokuse pripojit sa k databaze dostanem vynimku:

SQLSTATE[00000] [1045] Access denied for user: 'uzivatel@0.0.0.0' (Using password: YES)

Vyhodi ju hned prvy riadok metody:

        protected function createServiceNette__database__default()
294:        {
295:            $service = new Nette\Database\Connection('mysql:host=adresa_db;dbname=nazov_db', 'uzivatel', 'heslo', NULL);
296:            $service->setCacheStorage($this->getService('cacheStorage'));
297:            Nette\Diagnostics\Debugger::$blueScreen->addPanel('Nette\\Database\\Diagnostics\\ConnectionPanel::renderException');
298:            $service->setDatabaseReflection(new Nette\Database\Reflection\DiscoveredReflection($this->getService('cacheStorage')));
299:            return $service;

Kde parametre adresa_db, nazov_db, uzivatel a heslo su na 100% spravne (mam ich nastavene v config.neon), a databaza tiez funguje na 100% spravne. Pripojenie klasicky cez mysql_connect() s rovnakymi parametrami funguje bez problemov.

Nemate nejaku radu? Cache uz som skusal zmazat :)

saimons
Člen | 293
+
0
-

Co mas v configu? Mas nejnovjejsi verzi Nette?

Ja pouzivam toto:

config

common:
        php:
                date.timezone: Europe/Prague

        nette:
                database:
                        default:
                                dsn: '%database.driver%:host=%database.host%;dbname=%database.dbname%'
                                user: %database.user%
                                password: %database.password%
        services:
                database: @Nette\Database\Connection

production < common:
        parameters:
                database:
                        driver: mysql
                        host: localhost
                        dbname:
                        user:
                        password:

development < common:
        parameters:
                database:
                        driver: mysql
                        host: mysql9....cz
                        dbname:
                        user:
                        password:

model

class neco extends Object {

/** @var \Nette\Database\Connection */
    private $database;

    public function __construct(\Nette\Database\Connection $database) {
        $this->database = $database;
    }

    public function getVysledky() {
      return $this->database->table()..;
    }

Editoval saimons (24. 5. 2012 15:31)

srobowak
Člen | 27
+
0
-

moj config.neon:

common:
	php:
		date.timezone: Europe/Prague


	nette:
		session:
			expiration: '+ 14 days'

		database:
			default:
				dsn: '%database.driver%:host=%database.host%;dbname=%database.dbname%'
				user: %database.user%
				password: %database.password%


	services:
		database: @Nette\Database\Connection


production < common:

	parameters:
		database:
			driver: mysql
			host: adresa_db
			dbname: nazov_db
			user: uzivatel
			password: heslo

development < common:

	parameters:
		database:
			driver: mysql
			host: adresa_db
			dbname: nazov_db
			user: uzivatel
			password: heslo

A pouzitie v prezenteri:

	$query = 'SELECT ...';
	$this->template->items = $this->context->database->query($query)->fetchAll();

Este dodam, ze na lokale mi to s prislusnymi hodnotami parametrov funguje spravne. Problemy mam, ked to nahram na server (prihlasovacie udaje do db mam spravne, ako som spominal).

Este taka mala otazka: preco mas vo svojom config.neon v sekcii production adresu localhost a v sekcii development nieco.cz ? nema to byt naopak ? :)

castamir
Člen | 629
+
0
-

Proč by to mělo být naopak? Ta adresa je tam kvůli tomu, aby ses připojil na požadovaný server. Localhost jen značí, že se daná služba nachází na stejném serveru, což ale není dogma.

Ujisti se, že máš správně nastavené údaje v adrese produkční databáze, zda tam není něco na způsob

$Server='localhost:/path/mysql/mysql.sock'

Editoval castamir (24. 5. 2012 17:45)

saimons
Člen | 293
+
0
-

Sory je to trochu zmatecne, ale bral jsem to z rozpracovaneho projektu a DB uz bezi na ostrem serveru, tak se k ni pripojuji vzdalene. Ale nejak se mi nezdaji ty tvoje prihlasovaci udaje. Kde to hostujes?

Editoval saimons (24. 5. 2012 17:51)

srobowak
Člen | 27
+
0
-

tak tie udaje co som sem dal su samozrejme vymyslene..... ale inak ich mam spravne… ako hovorim, mysql_connect() funguje bez problemov… a hostujem to u websupportu… kruci fakt si s tym neviem dat rady…

JuniorJR
Člen | 181
+
0
-

Napadá mě zkusit sandbox z aktuální verze…

jtousek
Člen | 951
+
0
-

srobowak: Zkus ještě místo mysql_connect přímo PDO.

ricco24
Člen | 141
+
0
-

Nečítal som celé vlákno no zachytil som že hostuješ na websuporte. Nastavenie socketu by ti to malo vyriešiť. Nasledovne:

common:
      parameters:
              database:
                      driver: mysql
                      ...
                      socket: /tmp/mysql50.sock
...
...
              database:
                      default:
                              dsn: '%database.driver%:unix_socket=%database.socket%;dbname=%database.dbname%'
srobowak
Člen | 27
+
0
-

ricco24: to nastavenie socketu som skusal ale s rovnakym vysledkom… co je to vlastne za cestu ? ten subor mysql50.sock je na databazovom serveri, alebo ma byt niekde u mna (php server) ?

jtousek: skusal som, teda myslim tak, ze som si priamo v skripte vytvoril instanciu triedy Connection. Tiez rovnaky vysledok :(

EDIT:

Takze problem vyrieseny… v dsn je potrebne posielat ten socket, ale nesmie tam byt host.

Editoval srobowak (26. 5. 2012 10:38)