Archive for the 'MySQL' Category

MySQL

Stored procedure per archiviare una tabella

Ecco a voi un rapido esempio su come creare una stored procedure su mysql che crea un backup di una tabella e la svuota. Il backup viene effettuato su una tabella di tipo ARCHIVE, quindi compressa e senza chiavi primarie. Naturalmente per adattare lo script alle vostre esigenze cambiate la struttura ed il nome della tabella nelle “SET” delle variabili “backup_table_name” e “backup_table_structure”, con la struttura della tabella che volete archiviare eliminando chiavi primarie, campi con autoincremento ed eventuali vincoli di integrità (lasciando solo la struttura di base).

mysql logo

Lanciando la stored procedure “CALL BACKUP_TABLE(1)” verrà automaticamente creata una tabella dal nome “backup_nome_tabella_aaaaMMggHHmmss” compressa, e la tabella di origine verrà svuotata. Se preferite che la tabella di origine non venga svuotata passate alla stored procedure il parametro “0″: “CALL BACKUP_TABLE(0)”. Nel mio caso lo script si è rivelato utilissimo per fare in automatico il backup di una tabella di log.
Continue Reading »

MySQL, Source Code, php

Nuova versione della classe MySQLDump per il backup di DB MySQL

Guest post di Daniele

Oggi vi presento la nuova versione (2.0) della classe MySQLDump già introdotta da questo articolo nel quale si spiega come utilizzare questo strumento per semplificare il backup di database MySQL mediante pagine php.

I miglioramenti non sono molto numerosi dato che si partiva dal già ottimo lavoro di inandrea ma penso possano rivelarsi abbastanza utili: ora è infatti possibile esportare struttura e/o dati non solo dell’intero database selezionato ma anche di una singola tabella.

Ipotizziamo di avere un database denominato ‘ilmiodatabase’ e, all’interno di questo la tabella ‘lamiatabella’. Ora vediamo come esportare struttura e dati per la nostra tabella. (Attenzione che l’interfaccia della classe è leggermente cambiata rispetto alla precedente versione).

//Includo la libreria
@include_once('lib_dump.php');
//Connessione al database
$connection = @mysql_connect('127.0.0.1','username','password');
//Creazione di una istanza della classe MySQLDump
//1° parametro: il nome del database da esportare
//2° parametro: il file che conterrà il dump
//3° parametro: il tipo di file creato (true = compresso, false = semplice)
//4° parametro: la codifica dei dati (true = esadecimale, false = plain text)
$dumper = new MySQLDump('ilmiodatabase','filedidump.sql',false,false);
//Espotazione della struttura della tabella 'lamiatabella'
$dumper->getTableStructure('lamiatabella');
//Espotazione dei dati contenuti nella tabella 'lamiatabella'
$dumper->getTableData('lamiatabella');

Continue Reading »

MySQL, Source Code, Web, php

Interfaccia alla classe MySQLDump per il backup

La classe MySQLDump è stata aggiornata a una nuova versione e questo articolo contiene informazioni obsolete. Per informazioni sulla nuova versione controllare l’articolo sulla nuova versione

Dopo il successo dell’articolo Backup di un database mysql da php, ho deciso di scrivere un piccolo post su un file che può ritornare utile per scaricare il backup del db di un sito o di un blog wordpress direttamente dal browser.
Per usare lo script, basta semplicemente scaricarlo e modificare le prime linee, dove è contenuta la configurazione:

// Configurazione del DB
$server = "IP del server (localhost dovrebbe andare bene nella maggior parte dei casi=";
$username = "Nome utente del db";
$password = "Password del db";
$dbToDump = "Nome del db di cui fare il dump";
// password per accedere alla pagina php. Ricordati di cambiare la password di default!!!
$backupPassword = "UltraSecretKeyThatYouMUSTInsertHere";
// nome del file in cui salvare il backup
$filename = "backup.sql.gz";

Dopo ciò, si può uploadare il file nel server, nella stessa cartella dove è presente la classe MySQLDump.
Per accedere allo script bisogna specificare due parametri: la password per accedere allo script (pass), e un altro parametro (t) che se è 1 separerà le SQL insert ogni 100 righe.
Per esempio, se si è uploadato il file nella directory principale del sito, basta scrivere nella barra degli indirizzi del browser:

http://www.iltuosito.it/backup.php?pass=UltraSecretKeyThatYouMUSTInsertHere&t=1

…e il browser aprirà la finestra di dialogo per scaricare il file con il backup del db!

Download MySqlDump Interface.php. Downloads: 415

Per ulteriori informazioni sulla classe MySQLDump, leggere l’articolo originale, o scaricare il sorgente da qui:

Download MySQLDump. Downloads: 1938

MySQL, Source Code, Web, php

Backup di un database mysql da php

La classe MySQLDump è stata aggiornata a una nuova versione e questo articolo contiene informazioni obsolete. Per informazioni sulla nuova versione controllare l’articolo sulla nuova versione

In questi giorni ho deciso di scrivermi uno script su linux, per aggiornare automaticamente la mia copia in locale di questo “FANTASTICO” sito, in modo da potere smanettare sul css e sulle pagine, senza disturbare i lettori. Sinceramente mi sembrava una cosa veloce, infatti dovevo semplicemente fare il dump del database mysql di aruba, riversare il tutto nel mio db locale e opzionalmente scaricare l’intero sito via ftp. Senonché ho, tristemente, scoperto che aruba non dota i suoi “hosting server” del comando “mysqldump” (ottima utility che consente velocemente di fare il dump completo di un db mysql).

Lamp

A questo punto ho deciso di sbracciarmi le maniche e ho capito che avrei dovuto mettere mano al php. Per evitare di iniziare da zero, ho cercato qualcosa di più o meno pronto da modificare il meno possibile.

Continue Reading »

C, MySQL, Source Code

Trasformare un oggetto C# in stringa SQL

Il post seguente fa parte del progetto SQLStringBuilder. Per le ultime versioni del codice sorgente si consiglia di prelevare il codice dal CVS.

Ogni volta che dobbiamo creare delle query SQL in un linguaggio di programmazione spesso si fa qualcosa che ho sempre reputato sporco, del tipo:

int id = GetTableID();
string place = GetPlace();
DateTime timestamp = GetLastActionDate();
string strTimestamp = Utils.GetSQLDate(DateTime.Now);
string sql = "INSERT INTO table VALUES(" + id + ",'" + place + "'," + timestamp + "')";

Nella creazione della stringa bisogna stare attentissimi alle sequenze di virgolette, virgole e apici vari, e basta sgarrare uno di questi elementi per sminchiare completamente la query! Lo scopo di questo articolo è quello di creare un metodo che prenda in ingresso un oggetto c# qualsiasi e restituisca una stringa formattata nel modo corretto. L’intestazione del metodo è la seguente:

public static string GetSQLObject(object value)

Continue Reading »

C, MySQL, php

Ottenere una stringa pulita SQL

Il post seguente fa parte del progetto SQLStringBuilder. Per le ultime versioni del codice sorgente si consiglia di prelevare il codice dal CVS.

Se dobbiamo lavorare con delle stringhe SQL in un ambiente in cui la sicurezza è fondamentale, non possiamo assolutamente permetterci di mandare in pasto al MySQL stringhe senza prima averle ripulite per bene. Quella che può sembrare un esagerazione di un programmatore pazzo invece si reputa un enorme falla di sicurezza se non implementata
Se per esempio diamo in pasto la seguente SQL al db: string sql = "INSERT INTO table VALUES('" + textBoxNomeCliente.Text + "')";

dove textBoxNomeCliente è il text box riempito dall’utente, i rischi di sicurezza sono praticamente enormi. Cosa succederebbe se per esempio il cliente nel textbox scrivesse:

Ti sto per fottere il DB...'); DROP TABLE "tabellaConDatiImportantissimi"; INSERT INTO table VALUES('ti ho fottuto il DB haha!

La query in pratica diventerebbe:

INSERT INTO table VALUES('Ti sto per fottere il DB...'); DROP TABLE "tabellaConDatiImportantissimi"; INSERT INTO table VALUES('ti ho fottuto il DB haha!')

Bello vero?? In pratica l’utente malintenzionato può facilmente eseguire tutte le query che vuole, in questo caso cancellando completamente una tabella.
Continue Reading »

C, MySQL

Convertire un oggetto DateTime C# in un campo SQL

Il post seguente fa parte del progetto SQLStringBuilder. Per le ultime versioni del codice sorgente si consiglia di prelevare il codice dal CVS.

Per costruire una stringa SQL in cui dobbiamo inserire un campo di tipo data, la soluzione più ovvia sembra quella di prendere l’oggetto DateTime in cui è contenuta la data e convertirlo in stringa, dopodichè aggiungere questo valore alla condizione della stringa della query SQL:

DateTime date = DateTime.Now;
string sql = "INSERT INTO tableWithDate VALUES(1, "+ date.ToString() + ")";

Purtroppo DateTime.ToString() ci ritorna una stringa del tipo 23/02/2007 19.00.49, mentre il MySQL vuole passata una stringa del tipo 2007-02-23 19:00:49, quindi il pezzo di codice precedente, se eseguito, ci restituirebbe un bell’errore MySQL.
Il semplicissimo metodo statico qui di seguito permette di convertire un oggetto DateTime in stringa in modo da essere accettato dal MySQL:

public static string GetSQLDate(DateTime date)
{
string sql;
sql = date.Year.ToString() + "-" + date.Month.ToString() + "-" + date.Day.ToString() + " "
+ date.Hour.ToString() + ":" + date.Minute.ToString() + ":" + date.Second.ToString();
return sql;
} 

Io ho inserito il metodo all’interno di una classe di utilità, che ho chiamato per l’appunto Utils, quindi la query iniziale diventerà:

string sql = "INSERT INTO tableWithDate VALUES(1, "+ Utils.GetSQLDate(date) + ")";

C, MySQL

Salvare un Blob MySQL in C#

Il post seguente fa parte del progetto SQLStringBuilder. Per le ultime versioni del codice sorgente si consiglia di prelevare il codice dal CVS.

Oggi mi si è posto davanti il problema di salvare un campo blob in un database MySQL utilizzando c# come linguaggio. La soluzione è stata abbastanza semplice, ma può risultare ostico trovarla per chi non è avezzo con il C#.

Il Blob è un campo binario dove vengono salvati dati, e per passare questi dati binari all’interno di una stringa SQL testuale dobbiamo convertire i dati binari in una rappresentazione esadecimale e poi inserirli nella SQL.

Binary data

Il risultato sarà qualcosa del genere:

INSERT INTO tableWithBlob VALUES(1,0xab425fa52d3e13);

Dove 0x…. sono i nostri dati binari.

Innanzitutto dobbiamo convertire la struttura dati da salvare nel database in un array di byte (byte[]), o comunque dobbiamo poter accedere a tutti i byte della struttura.
Continue Reading »

MySQL

Come usare le Stored Procedure in MySQL

Esattamente come una funzione in qualsiasi linguaggio di programmazione evita di riscrivere più volte le stesse cose, le Stored Procedure sono un ottimo metodo di ripetetere query complicate e parametrizzarle in modo da poterle riutilizzare in qualsiasi momento, e col vantaggio di non lavorare direttamente con stringhe SQL chilometriche.

Per creare una nuova Stored Procedure è necessario avere installato MySQL con versione maggiore o uguale alla 5.0 (le Stored Procedure sono state infatti introdotte proprio nella versione 5.0). Se si utilizza il MySQL Query Browser la creazione è abbastanza immediata:

Clic col tasto destro sul database in cui si vuole creare la procedura (Dalla versione 5.0.1 le Procedure sono assegnate a un Database specifico, nella versione 5.0 invece erano globali)

New Stored Procedure From QueryBrowser

Continue Reading »