Nejde mne připojit k databázi

Karel Chramosil
Člen | 114
+
0
-

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
+
+3
-

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
+
0
-

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;

  1. new Nette\Database\Connection hledá v App\Presenters\Nette\Database\Connection
  2. new \Nette\Database\Connection hledá v \Nette\Database\Connection

Princip jak v odkazování na webu.

Editoval Infanticide0 (18. 7. 12:02)

Šaman
Člen | 2662
+
+2
-

A jestli jsi to opsal někde z interního kódu Nette, tak tam je zase vždy

use Nette;

a s tím by ti tehle kód fungoval.

Ale ve své aplikaci si opravdu prosím nevytvářej připojení pomocí operátoru new, ale použij config a DI.

Editoval Šaman (18. 7. 14:07)

Karel Chramosil
Člen | 114
+
0
-

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
+
+1
-

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
+
+2
-

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
+
+5
-

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
+
0
-

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
+
+3
-

@piskotek

  1. Pokud nemáš stejný problém jako původní tazatel (“Chyba: Class „App\Presenters\Nette\Database\Connection“ not found”), tak založ nové vlákno.
  2. 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.
  3. Nette\Database\Connection má i 4. parametr array $options. Když v něm uvedeš ['charset' => 'utf8'], tak se nepoužije výchozí hodnota utf8mb4 a tvá chyba zmizí. (Ovšem může se objevit jiná, když budeš chtít do tabulky uložit data, která jsou v utf8mb4, avšak ne v utf8 – např. unicode emoji.)
piskotek
Člen | 35
+
0
-

@nightfish

  1. ano sorry, je to jiny problem
  2. ano to je mi jasne, bohuzel to nejsou moje DB a potrebuju z nich jen cist data
  3. diky 4. parametr pomohl

diky