Wedos Mysql Máte někdo zkušenost ?

mimacala
Člen | 113
+
0
-

Ahojte,
udělal jsem si takový instalátor na nastavení nette pro uživatele něco jako má wp.
Problém je v tom, že když si chci ověřit připojení do db mimo nette hodí mi to chybu Connection failed: Connection timed out.
Pokud nette nastavím manuálně normálně se do db připojí.

Otázka tedy zní, jak se nette připojuje k db, protože nette s tím problém nemá.

Děkuji za pomoc :)

// Create connection
    $conn = new mysqli($server, $username, $password, $dbname);
// Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    echo "Connected successfully";

}

Editoval mimacala (24. 6. 2023 8:54)

nightfish
Člen | 474
+
+1
-

@mimacala Connection timed out je často způsobeno tím, že se připojuješ na špatné místo nebo ze špatného místa.
Opravdu používáš přes Nette i mimo Nette stejné údaje pro připojení? V tomto případě tedy hlavně adresu serveru, případně port, na kterém běží mySQL (obvykle 3306)?
Zároveň bych se nedivil, kdyby měl Wedos na své mySQL servery omezen přístup jen ze svých serverů – nezkoušíš se tedy připojit k mySQL třeba „z domu“?

mimacala
Člen | 113
+
0
-

@nightfish
Přihlašovací údaje používám opravdu stejné, protože je kopíruji ze souboru .neon včetně hostu.
Na wedosu mi řekli, cituji

Dobrý den,

do databáze na webhostingu je možné se připojit pouze přes IP webhostingu nebo přes phpMyAdmin.

Svůj soubor setup.php mám normálně ve složce domény hned vedle nette, ale nette se normálně připojí a funguje, tudíže nechápu co dělám špatně :/

nightfish
Člen | 474
+
0
-

@mimacala

Pak ti zřejmě nezbývá, než postupně odstraňoval odlišnosti mezi tím, co dělá Nette a co děláš ty, než zjistíš, v čem se ty pokusy o připojení liší. Osobně bych se zaměřil na to, co už jsem psal – shodu adresy mySQL serveru. A ověřit nikoliv tím, že si řekneš „jsou na pohled stejné v config.neon i v mém skriptu“, ale reálně si je vypíšeš na místě, kde se spojení vytváří a porovnáš vypsané hodnoty.

Dále bych prověřil, že problém není způsoben tím, že nette/database používá pro připojení k databázi PDO, zatímco ty používáš mysqli.

mimacala
Člen | 113
+
0
-

@nightfish
Podívej opraveno na

    try {
        $pdo = new PDO('mysql:host=' . $server . ';dbname=' . $dbname . '', $username, $password);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "ok";
    } catch(PDOException $e) {
        echo $e->getMessage();
    }

a stále stejná chyba :/
Zajímalo by mě co dělá nette jinak.

nightfish
Člen | 474
+
0
-

@mimacala Ok, druhá část mého předchozího komentáře nepomohla. A co ta první část, to jsi zkoušel?

mimacala
Člen | 113
+
0
-

@nightfish
Prosim jak si mohu vypsat tu adresu serveru, kterou vytvari nette pri pripojeni do db ?
A jak si mohu vypsat tu svoji ?

Dekuji

nightfish
Člen | 474
+
0
-

Prosim jak si mohu vypsat tu adresu serveru, kterou vytvari nette pri pripojeni do db ?

Nejjednodušší je podívat se vygenerovaného DI kontejneru Nette na serveru – standardně temp/cache/nette.configurator/Container_*.php – v tomto souboru najít řádek obsahující public function createServiceDatabase__default__connection(): Nette\Database\Connection – za ním by mělo být něco ve stylu:

$service = new Nette\Database\Connection(
			'mysql:host=127.0.0.1;dbname=**redacted**',
			'**redacted**',
			'**redacted**',
			['lazy' => true, 'charset' => 'utf8mb4'],
		);

Zajímá tě to host=....
Pokud je tam Container_*.php souborů víc, tak vem ten nejnovější. (A nebo si projdi všechny – aspoň zjistíš, jestli obsahují všechny totéž.)

A jak si mohu vypsat tu svoji ?

var_dump($server); v setup.php před tím, než voláš new PDO().

V obou případě bych měla být stejná a měla vypadat jako mdX.wedos.net nebo wmX.wedos.net, kde X je číslo (alespoň to takto mají napsané v dokumentaci od Wedosu).

mimacala
Člen | 113
+
0
-

@nightfish
Takže koukal jsem tam na to a v obou souborech mám naprosto stejné údaje :D.
Tak teď jsem z toho úplně vedle a vůbec nevím kde mám hledat chybu, nette přece taky využívá v connection PDO v úplně totožném znění..

Pavel Kravčík
Člen | 1182
+
+1
-

Můžeš se připojit jenom ze stejného webhostingu kam databáze patří. Tj. adminer ve složce /www/ bude fungovat, ale adminer na locale i se správnou URL fungovat nebude.

mimacala
Člen | 113
+
0
-

Má to strukturu domain/mojedomena.cz/setup.php
a nette má strukturu domain/mojedomena.cz/

Přistupuji do db z hostingu nikoliv z localhostu :/

mimacala
Člen | 113
+
-4
-

Kdyby někdo řešil podobný problém tak zde přikládám řešení.
Problém je v tom, že jsem přehlédl isset a zaměřil jsem pozornost na špatnou stranu..
isset vrácí boolean, takže v proměnných k připojení do db nebyly hodnoty z formuláře ale hodnota booleanu..
Stačí odmazat isset.
Moc děkuji všem za čas a ochotu.

$server = isset($_POST['host']);
    $username = isset($_POST['dbuser']);
    $password = isset($_POST['dbpassword']);
    $domain = isset($_POST['domain']);
mystik
Člen | 292
+
+4
-

Jak se ti to povedlo prehlednout pokud jsi udelal ten var_dump($server)? 🤦😀