Wedos Mysql Máte někdo zkušenost ?
- mimacala
- Člen | 113
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 | 519
@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
@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 | 519
@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
@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 | 519
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).
- Pavel Kravčík
- Člen | 1196
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
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']);