Nejde mne připojit k databázi
- Karel Chramosil
- Člen | 114
Dobrý den,
prosím o radu nemohu se připojit k databázi.
Verze nette:
{
„name“: „nette/web-project“,
„description“: „Nette: Standard Web Project“,
„keywords“: [„nette“],
„type“: „project“,
„license“: [„MIT“, „BSD-3-Clause“, „GPL-2.0“,
„GPL-3.0“],
„require“: {
„php“: „>= 8.0“,
„nette/application“: „^3.1“,
„nette/bootstrap“: „^3.2“,
„nette/caching“: „^3.2“,
„nette/database“: „^3.2“,
„nette/di“: „^3.1“,
„nette/forms“: „^3.1“,
„nette/http“: „^3.2“,
„nette/mail“: „^4.0“,
„nette/robot-loader“: „^4.0“,
„nette/security“: „^3.1“,
„nette/utils“: „^4.0“,
„latte/latte“: „^3.0“,
„tracy/tracy“: „^2.9“
},
„require-dev“: {
„nette/tester“: „^2.4“,
„symfony/thanks“: „^1“
},
„autoload“: {
„psr-4“: {
„App\\“: „app“
}
},
„minimum-stability“: „stable“,
„config“: {
„allow-plugins“: {
„symfony/thanks“: true
}
}
}
lokal.neon :
parameters:
database:
dsn: ‚mysql:host=sql19.web4u.cz;dbname=dbkch4‘
user: ‚-----‘
password: ‚------‘ # Consider storing credentials
kód:
declare(strict_types=1);
namespace App\Presenters;
//namespace App\Model;
use Nette\Application\UI\Form;
use Nette\Database\Connection;
use Nette\Database\Explorer;
use Tracy\Debugger;
final class ProductPresenter extends BasePresenter
{
//private string $id;
private string $produkt_jmeno;
private string $produkt_obsah;
private string $produkt_nadpis;
private string $dostupnost;
private float $cena;
private $database;
public function renderDefault($id)
{
$database = new Nette\Database\Connection('mysql:host=sql19.web4u.cz;dbname=dbkch4','---------','---------');
Debugger::$dumpTheme = 'blue';
//kontrola správnosti $id
if (isset($id)) {
$this->id = $id;
} else {
$this->id = '1';
}
parent::renderDefaultLogic($this->id);
Chyba: Class „App\Presenters\Nette\Database\Connection“ not found
nevím proč nevidím Class …
Děkuji za radu
Karel Chramosil
- Marek Bartoš
- Nette Blogger | 1274
Pročti si jak fungují importy. Používáš v importu název, ale pak ho
nepoužíváš v kódu. Místo toho používáš název, pro který import
nemáš a tak je název relativní od aktuálního namespace.
https://www.php.net/…mporting.php
- Infanticide0
- Člen | 107
Ale fuj, to si doufám jen testuješ.
chyba Class „App\Presenters\Nette\Database\Connection“ not
found řiká, že tu třídu nenašlo, podle mě tam nikdy nebyla a
nikdy nebude, protože je v Nette\Database\Connection
, tak si buď
přidej use Nette;
nebo new \Nette\Database\Connection
a mělo by ji to najít.
jsi v namespace App\Presenters;
- new Nette\Database\Connection hledá v App\Presenters\Nette\Database\Connection
- new \Nette\Database\Connection hledá v \Nette\Database\Connection
Princip jak v odkazování na webu.
Editoval Infanticide0 (18. 7. 12:02)
- Karel Chramosil
- Člen | 114
Díky za rady.
musel jsem se podívat do demo příkladu.
Cpal jsem parametry database do config.neon místo do common.neon.
Už přihlášení funguje.
Karel Chramosil
- Infanticide0
- Člen | 107
Takže už nevoláš
$database = new Nette\Database\Connection(..)
?
Do common.neon tyhle údaje podle mě nepatří, nejsou přece common pro localhost a produkci, nebo máš všude stejný hesla a verzuješ si je v gitu?
Jak se stane, že tady máš tak dlouho účet a ptáš se na něco tak základního?
Editoval Infanticide0 (18. 7. 16:13)
- Marek Bartoš
- Nette Blogger | 1274
Je jedno do kterého neonu konfiguraci přidáváš, dokud jsou přidané přes configurator v bootstrapu. Případně když jeden includuje druhý. V prázdném Nette projektu jsou dva konfiguráky jen proto, že služby mají být v jednom, verzovaném v gitu a v druhém mají být přihlašovací údaje, které jsou jen na serveru
- Marek Bartoš
- Nette Blogger | 1274
Udělej si službu a projdi si nějaký (aktuální) php tutoriál. Následně dokumentaci Nette. Nejlépe si to všechno hned zkoušet sám. Naučíš se to mnohem lépe, než když budeš náhodně zkoušet a pak se na fóru ptát na základy
Vhodný editor též hodně pomůže, uvidíš tak věci jako neexistující třídy, jako v tomhle případě. PHPStorm s Nette, Neon a Latte pluginy je ideální.
Editoval Marek Bartoš (18. 7. 17:17)
- piskotek
- Člen | 35
Ahoj,
připojuju se na mysql (růžné verze nemám ve správě a nikdy mít
nebudu).
Aplikace používá php8.2 a vrací mi chybu:
Nette\Database\DriverException #42000
SQLSTATE[42000]: Syntax error or access violation: 1115 Unknown character set:
‘utf8mb4’
připojení které vrací chybu vypadá takto:
$dsn = 'mysql:host='.$this->fveIp.';dbname=DB_NAME;CHARSET=utf8;';
$user = $this->fveLogin;
$password = $this->fvePass;
return new Nette\Database\Connection($dsn, $user, $password);
toto připojení funguje, ale nevyhovuje mi
new PDO("mysql:host=$this->fveIp;dbname=datalogger", $this->fveLogin, $this->fvePass);
nějaké postrčení jak to připojení opravit?
Díky
- nightfish
- Člen | 518
@piskotek
- Pokud nemáš stejný problém jako původní tazatel (“Chyba: Class „App\Presenters\Nette\Database\Connection“ not found”), tak založ nové vlákno.
- mysql server ti říká, že nezná znakovou sadu
utf8mb4
. Ta byla podle internetů přidána ve verzi 5.5.3, která je z roku 2010 – to opravdu nechceš podporovat. Nette\Database\Connection
má i 4. parametrarray $options
. Když v něm uvedeš['charset' => 'utf8']
, tak se nepoužije výchozí hodnotautf8mb4
a tvá chyba zmizí. (Ovšem může se objevit jiná, když budeš chtít do tabulky uložit data, která jsou vutf8mb4
, avšak ne vutf8
– např. unicode emoji.)