pripojenie k databaze: PDOException #1045
- srobowak
- Člen | 27
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
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
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
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)
- ricco24
- Člen | 141
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
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)