Newsgroup: it.comp.www.php
Titolo: symfony 6 problema connessione database

 
ho un [@zz0 di errore di connessione al database da cui non riesco a
venirne fuori :
 
premesso che ho seguito paro paro :
https://symfony.com/doc/current/doctrine.html
 
 
#symfony console doctrine:database:create
Could not create database `MIODATABASE` for connection named default
An exception occurred in the driver: SQLSTATE[HY000] [2002] Connection refused
 
Qualche idea?
 
Enrico 
 
 
 
 
 

Il 19/01/23 12:42, Enrico Maria Chellini ha scritto:

i parametri di connesione al db sono corretti?
 
quale  DBMS stai utilizzando?
 
il problema che hai è che non riesce ad autenticarsi al db.
 
tramite un qualsiasi client riesci ad accedere al db?

 tramite un qualsiasi client riesci ad accedere al db?
 
ORM mariadb
 
nessun problema di connessione con phpmayadmin, CMS, etc.
 
Enrico 
 

Il 19/01/23 13:12, Enrico Maria Chellini ha scritto:

ok
 
l'utenza ha le grant per fare operazioni di DML?
l'utenza ha le grant per connettersi da remoto?
 
 
 
 
 

 
 
non è in remoto è in locale, è per un progetto in sviluppo.
comunque no, ho ho dato permessi a mariadb di connettersi fuori da
localhost
 
Enrico 
 

Il 19/01/23 14:19, Enrico Maria Chellini ha scritto:

ti chiedevo dei permessi da remoto in quanto se sympony non è installato 
nella stessa macchina di mariadb , è normale che non ti funzionava
 
hai provato con il client mysql da riga di comando se funziona?
 
mysql -h host -u user -p password
una volta dentro
create database miodatabase;
 
altra cosa è verifica bene i paramentri inseriti in sympony
 
PS
stai utilizzando docker o simili?
 

Il 19/01/23 14:19, Enrico Maria Chellini ha scritto:

verifica anche i log di mariadb cosa dicono

 
No.
 
 
 
 

Il 19/01/23 15:56, Enrico Maria Chellini ha scritto:

se stavi seguendo paro paro la guida
 
Configuring the Database
 
The database connection information is stored as an environment variable 
called DATABASE_URL. For development, you can find and customize this 
inside .env:
 
# .env (or override DATABASE_URL in .env.local to avoid committing your 
changes)
 
# customize this line!
DATABASE_URL="mysql://
db_user:db_pa...@127.0.0.1:3306/db_name?serverVersion=5.7
"
 
# to use mariadb:
DATABASE_URL="mysql://
db_user:db_pa...@127.0.0.1:3306/db_name?serverVersion=mariadb-10.5.8
"
 
# to use sqlite:
# DATABASE_URL="sqlite:///%kernel.project_dir%/var/app.db"
 
# to use postgresql:
# 
DATABASE_URL="postgresql://
db_user:db_pa...@127.0.0.1:5432/db_name?serverVersion=11&charset=utf8
"
 
# to use oracle:
# DATABASE_URL="oci8://
db_user:db_pa...@127.0.0.1:1521/db_name
"
 
 
ci sono 2 righe scommentate
 
 
# customize this line!
DATABASE_URL="mysql://
db_user:db_pa...@127.0.0.1:3306/db_name?serverVersion=5.7
"
 
# to use mariadb:
DATABASE_URL="mysql://
db_user:db_pa...@127.0.0.1:3306/db_name?serverVersion=mariadb-10.5.8
"
 
 
ce ne dovrebbe essere SOLO UNA, può essere che le hai lasciate entrambe 
ma hai modificato con i tuoi parametri solo la prima riga?
 
 
 

 entrambe ma hai modificato con i tuoi parametri solo la prima riga?
 
no no, messo solo una riga, ho modificato quella del file .env
presente, ovviamente ho messo la mia versione di mariadb,
 
provo su debian 
 
Enrico 
 
 
 
 

 ha scritto:
 
 
l'unico dubbio ce l'ho su questa riga
 
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
 
forse default va cambiato?
 
il log dice :
Could not create database `MIODATABASE` for connection named default
 
enrico
 
 

 
 
niente, sempre:
 
CONSOL Command "doctrine:database:create" exited with code "1" code=1
command="doctrine:database:create"
 

Il 19/01/23 16:49, Enrico Maria Chellini ha scritto:

a rigor di logica mi fa pensare ad un errore di paramatri di 
configurazione per l'accesso al db
 
non utilizzo orm in genere, li trovi moooolto limitati (per chi conosce 
SQL) e aggiungono complessità inutile
oltre che dannosi
 
pensare di "mappare" dati e istruzioni sql come se fosse una classe con 
metodi e proprietà è dannoso per chi con i dati ci lavora.
 
te lo dico in primis da sviluppatore e dba in seconda battuta.
 
tornando al tuo errore, cercherei comunque nel setup della 
configurazione, penso che non legga o viene sovrascritta la tua 
configurazione a runtime
 
 
 
 

 te lo dico in primis da sviluppatore e dba in seconda battuta.
 
Ok si impara sempre qualcosa, che consiglieresti?
 
Enrico 
 

Il 19/01/23 18:17, Enrico Maria Chellini ha scritto:

di imparare seriamente SQL e utilizzare PDO come driver per php
 
 
per farti capire un orm non è in grado o diventa molto più complicato 
farlo con un orm che scrivere.
 
 
select distinct 
x.id
,
        concat(x.nome, x.cognome) as nominativo,
        d.indirizzo,
        'MANAGMENT' as posizione
        count(bonus) as bonus
from utente_a x,
      (select *
         from indirizzo
        where data_indirizzo = (select max(data_recapito)
                                  from indirizzo
                                 where cap  like '001%'
                                   and id_utente = x.id_utente)) d
where x.posizione in ('DIRIGENTE', 'QUADRO', 'FUNZIONARIO')
group by x.nome, x.cognome, d.indirizzo
having count(bonus) > 1000;
 
questa query è inventata ma penso che funzioni
in pratica estrae
 
id, nome e cognome e l'ultimo indirizzo di recapito delle persone con un 
bonus maggiore di 1000 che hanno una funzione da management 
(funzionario, quadro o dirigente) e che risiedono a roma (001xx come cap)
 
 
 
 

Il 19/01/23 18:51, Bramante ha scritto:

         and d.id_utente = x.id_utente) d


 cap)
 
ok ma per la connessione di cosa ho bisogno? 
 
le query le scrivi nel controller?
 
enrico 
 
 
 

 
 
hai qualche link da leggermi?
Enrico 
 

 
non usi gli oggetti Criteria ?
 
Enrico
 

Il 19/01/23 19:48, Enrico Maria Chellini ha scritto:

i progetti li ho sempre basati su pattern MVC (piccoli o grandi 
progetti, non fa differenza, dal servizio rest API, alla paginetta dei 
contatti di un sitarello)
 
quindi la parte di business logic è demandata al Model, nel controller 
non faccio altro che ricevere l'input, fare i classici controlli formali 
e logici e poi chiamo un primo model che si occupa della business logic, 
se ho bisogno di accedere ai dati o scrivere su file, chiamare servizi 
esterni ecc, chiamo i relativi model specifici di quella singola azione.
 
ritorno il tutto al controller che si occuperà di scegliere la view 
corretta, che può essere una pagina html, o restituire un json, xml o 
creare un pdf, a seconda di che tipo di View (output) è stato invocato.
 
per farti capire l'utente deve ricevere il saldo dell'estratto conto, ha 
l'opzione di riceverla come pdf, oppure a video come pagina web o come 
json nell'app mobile.
 
 
per l'accesso al DB uso PDO
ho un file con i setting della mia applicazione dove ci sono tutti i 
parametri di config dal database, JVT, logger, ecc
 
 
al boot della mia applicazione (se utilizzi il pattern MVC avrai un 
unico entry point), mi carico in memoria ad esempio la classe PDO che 
ignetto nel model quando serve (tramite dependecy injection).
 
nel concreto
 
setting.php
....
return [
      'database' = ['host' => '127.0.0.1',
                    'dbname' => 'miodatabase',
                    'username' => 'user',
                    'password' => 'password];
.....
 
 
global_dependency_injection.php
......
$setting = $this->setting;
......
 
$pdo = new PDO("mysql:host=". $setting['database']['host'] . ";dbname=" 
. $setting['database']['dbname'], 
$setting['database']['user'],$setting['database']['password'] );
 
 
.......
 
 
user_controller.php
.......
 
include
global_dependency_injection.php
 
$user = new user($pdo);
$elenco_persone_bonus = $user->GetBonus(1000);
 
.......
 
 
 
user_model.php
class user {
     private $db = null;
 
     private function __construct($db) {
             this->$db = $db;
     }
 
     public function GetBonus ($bonus) {
         $sql = "select nome from tabella where bonus > :param_bonus";
         $statement = $this->db->prepare($sql);
         $statement->execute(['param_bonus' => $bonus]);
         $risultato = $statement->fetchAll;
         foreach ($risultato as $row) {
           //elaboro le righe
           // ad esempio l'elenco degli user con bonus > 1000
           $elenco[] = [$row['nome'];
         }
         return $elenco;
      }
}
 
 
 
 
 
 

 
 
 
No è la distribuzione che mi pianta qualcosa, ho installato su Debian
11, va tutto;
 
unica cosa che devo sviluppare accendendo anche la debian.
 
Preferivo utilizzare usare solo un pc, ma forse è meglio così; fra un
po' c'è la versione 9 di mageia, questo lo riformatto.
 
Nel frattempo indago  con calma.
 
Grazie comunque.
Enrico 
 
 

 }
 
Perchè non usi gli oggetti criterea?
 non sarebbero più sicuri per evitare sqlinjection?
ho visto che hai fatto un prepare sulla query, i criterea non
semplificherebbero il lavoro con la medesima sicurezza per query
semplici?
 
son compatibili con MVC?
 
Enrico 
 

 devo installare un modulo e disistallare orm? 
 
Aspetta non avevo capito, MVC Model View Controller 
non è un modulo tipo ORM ma il framwork, scusa mi sono coglionato da
solo. 
 
comunque il discorso non cambia, per lavorare sena ORM c'è da
installare un modulo particolare che ti ritorna i file sotto indicati?

cosi messa è la stronzata dell'anno, ma viene dal fatto che avevo
frainteso sopra. 
 
Intendevo dire :
 gli oggetti criterea non funzionano senza ORM giusto?
 
quindi ti riscrivi tutte le query di sana pianta, ma rimangono
compatibile con altri moduli symfony o c'è dopo da smanettare?
 
perchè a parte il lavoro  in più, mi si perde un po' il senso del
framwork; posso riscrivere tutto a mano e via.
 
Enrico  
 
 
 

 
 
ok per tutto; 
io ho seguito abbastanza rigidamente un paio di toutorial un po' di
tempo fà;
 poi ho interagito con i moduli di un CMS, basato su symfony, che più o
meno usava la stessa logica.
 
Pero mi interessa capire bene anche come lavori te. 
 
Mi spiego, se ho capito bene:
 
 
IO ho fatto l'installazione  modificando il file .env e lanciando 
#symfony console doctrine:database:create
 
TU hai creato due, file uno config/setting.php  e l'altro
config/global_dependency_injection.php 
 
 
IO il database l'ho costruito da riga di
comando #symfony console make entity
 
 
TU 
https://dbeaver.io/
 
 
poi scrivi le query in maniera row, che rende sicuramente più veloce
l'esecuzione e ti da un controllo maggiore delle query 
 
Giusto?
 
Enrico 
 

 
 
Sempre Enrico, ma non mi funziona il server di connessione all'usenet , quindi sono entrato con google.
 
studio un po' quello che mi hai scritto, anche perchè sono abituato a una programmazione molto ruvida di php,  quindi probabile mi trovi meglio che a utilizzare classi e funzioni che sono differenti da php stantard; anche se ho l'obbiettivo di impararmele.
 
Grazie.
Enric