Selezionare l'utente di un database

Bene, sto creando un semplice installer per una mia applicazione su una intranet locale e ovviamente mi si presentano vari problemi.

Uno fra tanti ma sicuramente per ora il più rognoso è la selezione dell'utente per la verifica dei privilegi e l'assunzione del nome di database.

Questa mattina dopo aver scritto la semplice query : "CREATE DATABASE IF NOT EXISTS sm" non solo non me l'ha creato, ma il server mi ha risposto che non potevo connettermi al database! Errore 2002 riportato dal PDO.

Fatta una ricerchina in rete non sono approdato a nulla quindi prove che ti riprova per caso ho scoperto che il mio account non mi permetteva la creazione e ne la cancellazione dei database. (nel frattempo mi connettevo tranquillamente tramite phpMyAdmin con lo stesso nome utente). Quindi il server c'era eccome, l'errore al solito criptico del MySQL non mi diceva la verità sul problema.

Alla fine della fiera mi è venuto il seguente dubbio: come faccio aprioristicamente a creare un database in fase di installazione della mia applicazione da parte di un utente (che abbia ovvio i privilegi almeno di creare il dB) ma conoscendo comunque le impostazioni del server MySQL?

Spesso ci si trova di fronte a installazioni che prevedono davanti al nome del database il nome dell'utente, separato da un underscore per esempio Marcolino_database è un caso classico e tra l'altro quello del server dove deve girare la mia applicazione.

Come faccio a scoprire il nome utente da associare al database? Ad esempio "SELECT USER( )" mi fa vedere Marcolino@localhost e mi sta già bene, ma non so se a questo utente è associato un nome da inserire prima del nome di database, come faccio a scoprirlo?

inviato 4 anni fa
Marco Grazia
X 0 X

Secondo me sarebbe meglio, in fase di installazione, chiedere il nome del database che è stato precedentemente creato piuttosto che cercare di crearlo in quel momento.

Spesso infatti la creazione dei database deve avvenire attraverso altri meccanismi messi a disposizione dall'hosting oppure l'hosting dispone di un solo database creato in automatico all'atto dell'attivazione.

In tutti i casi quindi è l'utente a sapere come si chiama il database e a dover fornire questa informazione.

risposto 4 anni fa
Gianni Tomasicchio
E quale database precedente scusa le l'installazione è nuova? So che alcuni hosting non danno la possibilità di creare database ma ne danno uno predefinito e l'unica cosa che puoi fare è creare tabelle, per fortuna non è sempre così e allora che fare?Marco Grazia 4 anni fa
@MarcoGrazia secondo me bisogna chiedere all'utente di creare il database prima di iniziare l'installazione e, durante l'installazione, fornire il nome.Gianni Tomasicchio 4 anni fa
X 0 X

@Gianni Tomasicchio: Ci avevo pensato in effetti, comunque ho fatte alcune considerazioni stupide che mi hannno fatto capire che stavo approcciando al problema dalla parte sbagliata.

1) io il nome utente lo so già dal momento che lo script nemmeno potrebbe fare una benche minima query se non avesse le credenziali di accesso al DB, quindi io il nome dell'utente lo so. A dire il vero non lo so affatto ma mi basta mettere una richiesta di credenziali per iniziare l'installazione ed ecco che magicamente conosco le sue credenziali al DB.

2) il vero problema comunque rimane la questione dei privilegi, ovvero il nome del database sarà utente_nomeDB o nomeDB?

E' vero che posso fare la query SHOW GRANTS FOR utente ma mi viene fuori un casino di roba e che faccio una regex per vedere se c'è la strinfa utente\_% ? Non mi pare la prassi giusta ma ancora non sono riuscito a capire come fare a saperlo.

PS sta roba del punteggio per rispondere prima di 8 ore è una menata, ieri sera ero già arrivato a queste conclusioni ma non ho potuto scriverle prima della tua precedente risposta :(

risposto 4 anni fa
Marco Grazia
X 0 X

Beh, se vuoi creare un DB al momento devi comunque già sapere Host, Utente e Password. 

Anche io preferisco creare il tutto e poi inserirlo nella quick installation. 

Ad ogni modo di seguito trovi un script funzionante. Ovviamente a valle di questo puoi inserire le istruzioni per creare le tabelle.

<?php

/* Variabili */
$host = ""; 
$utente = "";
$password = "";
$database_da_creare = "";
 
$connect = mysql_connect($host,$utente,$password);
   if (!$connect){
       die('MySQL non connesso : ' . mysql_error());
   }
   if (mysql_query("CREATE DATABASE ".$database_da_creare,$connect)){
       echo "Database Creato";
   }else{
       echo "Errore nella creazione del database: " . mysql_error();
   }
mysql_close($connect);
?>

Spero di esserti stato utile, alla prossima.

Fobos!

risposto 4 anni fa
fobos
fobos
45
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda