[MySQL] Clear dello schermo durante una sessione
Mentre si lavora via shell con il client mysql, capita sicuramente di raggiungere il fondo della finestra e avere molta roba scritta in precedenza.
Per fare un po' di pulizia (che normalmente si fa con clear) basta fare:
system clearIn alternativa a system potete anche utilizzare anche \! seguito da un comando della shell predefinita (solitamente bash).
09:02 | Categorie: MySQL | 0 Comments
[PHP] Utilizzare la classe MDB2 con o senza aver installato PEAR
Supponendo che non possiate (o vogliate) installare Pear per utilizzare un suo solo package, è possibile selezionare soltanto i files di nostro interesse per l'utilizzo del suddetto package.
In questo caso vogliamo utilizzare MDB2:
PEAR MDB2 is a merge of the PEAR DB and Metabase php database abstraction layers. It provides a common API for all support RDBMS. Actually MDB2 is the second major version of MDB. The main differences between the new MDB2 and the old MDB version is that the API has been drastically refactored to clean up the API and improve performance.
Grazie a questa classe insomma, possiamo imparare solo alcune funzioni per le solite operazioni CRUD a prescindere dal DBMS utilizzato (a patto di aver installato i driver relativi), senza quindi doverci ricordare, ad esempio, come si effettua una connessione a MySQL piuttosto che a PostgreSQL: ci sarà un modo univoco specificando solamente il nome del DBMS a cui ci stiamo rivolgendo.
Inoltre è possibile definire lo schema di un database in formato XML in maniera tale da esser portabile per vari DBMS. Tale schema viene poi parsato da uno script PHP che si preoccuperà di creare database e tabelle, popolandole con i dati di nostro interesse.
Installazione tradizionale con Pear
Nel caso abbiate già installato Pear sul vostro computer, sarà sufficiente digitare i seguenti comandi da shell:
$ pear install MDB2
$ pear install MDB2#mysql
$ pear install MDB2#pgsql
...
Il primo comando installerà il package MDB2, mentre i seguenti installeranno i driver specifici per il vostro DBMS di riferimento.
Installazione manuale senza Pear
Se vogliamo utilizzare MDB2 senza installare tutto il sistema Pear, sarà sufficiente:
- Creare una directory contenitore come riferimento, ad esempio TEST;
- Scaricare il package PEAR (vers. stabile 1.7.1): una volta scaricato l'archivio, estrarre solamente il file PEAR.php e porlo in TEST;
- Scaricare il package MDB2: all'interno dell'archivio troverete una directory MDB2-* (dove * indica la versione, quella stabile è la 2.4.1), entrate in questa directory ed estraete il file MDB2.php e TUTTA la directory MDB2 in TEST;
- Scaricate i driver di vostro interesse: nel caso di MySQL, scaricate MDB2_Driver_mysql (la cui versione stabile è la 1.4.1). A questo punto entrate nella directory MDB2_Driver_mysql-* (dove * indica la versione), poi estraete in TEST/MDB2/Driver il file MDB2/Driver/mysql.php e poi estraete i singoli file mysql.php nelle directory Datatype, Function, ecc presenti nell'archivio in quelle rispettive di TEST/MDB2/Driver.
Riassumendo avremo la seguente gerarchia finale di files in TEST:
- TEST (dir)
- MDB2 (dir)
- Driver (dir)
- Datatype (dir)
- Common.php
- mysql.php
- Function (dir)
- Common.php
- mysql.php
- Manager (dir)
- Common.php
- mysql.php
- Native (dir)
- Common.php
- mysql.php
- Reverse (dir)
- Common.php
- mysql.php
- mysql.php
- Datatype (dir)
- Date.php
- Extended.php
- Iterator.php
- LOB.php
- Driver (dir)
- MDB2.php
- PEAR.php
- file_di_test.php
- MDB2 (dir)
file_di_test.php sarà il nostro file in cui testeremo l'efficacia delle classi (vedi sezione seguente). Nel caso in futuro voleste installare altri driver, sarà necessario porre il la classe principale sotto Driver e poi mettere le singole classi dedicate nelle directory di Driver (dove ci sono i vari mysql.php).
Esempio: file_di_test.php
Ecco il contenuto di questo file per testare una query su un database di MySQL denominato "sito" (e nello specifico si fa una select sulla tabella voto, la quale contiene un campo di tipo text con dei nomi di persona):
<?php
require_once 'MDB2.php';
// dbms://user:pass@host/db
$dsn = 'mysql://root:root@localhost/sito';
//$options = array ('persistent' => true);
$mdb2 =& MDB2::factory($dsn); //, $options);
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);// execute a query
$sql = 'select distinct autore from voto';
$result = $mdb2->query($sql);
echo "<h2>Lista dei nomi nella tabella "voto\"</h2>";
echo "<ul>";/* Every time you call fetchRow(), it will move to the next record and will give you a reference to the data contained in it. */
while ($row = $result->fetchRow()) {
echo "<li>".$row['autore']."</li>";
}
echo "<ul>";// release resources
$result->free();echo '<hr />Affected rows: ';
echo $mdb2->exec($sql);// close connection*/
$mdb2->disconnect();
?>
01:28 | Categorie: DBMS, MySQL, PHP, PostgreSQL | 0 Comments
[WP] Resettare la password di admin
Sempre per il ciclo "memoria di ferro", mi capita di non ricordare la password di admin di Wordpress...ma perchè farcela spedire dal sistema automatico (che nella versione 2.5.1 se non erro non funzionava nemmeno bene) per risettarla quando possiamo farlo in pochi secondi da PHPMyAdmin?
Da terminale digitiamo:
- orion@orion:~$ echo -n nuovapass|md5sum (l'opzione -n serve per non mandare in output il carattere \n che darebbe altrimenti un MD5 differente). Se non avete Linux potete usare un qualsiasi altro programma per windows che calcoli l'MD5 di una stringa o un qualsiasi servizio web che lo faccia per voi;
- trovate in PHPMyAdmin la directory wp-users e incollate il nuovo valore nel campo user_pass, dopo di che cliccare su Esegui.
- Provate a riloggarvi da Wordpress;
11:30 | Categorie: Linux, MySQL, wordpress | 1 Comments
[MySQL] Reset della password di root
Se ci dimentichiamo la password di root, può tornar utile quanto segue per settarne una nuova. Da terminale digitare in sequenza:
Dopo di che provare a riconnettersi con mysql -uroot -p e a mettere la nuova password.
- orion@orion:~$ sudo killall mysqld
- orion@orion:~$ sudo mysqld_safe --skip-grant-tables & (in output comparirà mysqld_safe[10232]: started con un PID diverso ovviamente)
- mysql -u root
- mysql> use mysql;
- update user set password=PASSWORD('root') where User='root';
Fonte: rat86
11:04 | Categorie: Linux, MySQL | 0 Comments
[PHP/SQL] Generare grafici a partire dallo schema SQL di un database
Può esser sicuramente interessante avere una visualizzazione grafica di uno schema SQL, in grado di evidenziare i legami fra le varie tabelle a colpo d'occhio. Infatti non sempre creiamo noi delle basi di dati e alle volte abbiamo a disposizione solo un dump del database.
Fonte immagine: A Ovest di Paperino
Ho visto che MySQL Workbench è in grado di importare uno script SQL e di generare il grafico che evidenzia le tabelle e i legami fra di esse.
In aggiunta ho trovato uno script PHP, Visualize, il quale facendo uso di Graphviz, può generare grafici in formato PNG degli script SQL rappresentanti lo schema di un database.
Sul sito è possibile scaricare uno screencast che mostra tale script in funzione, per comodità ho eseguito l'upload di tale filmato su Youtube e ve lo mostro di seguito (quanto l'autore scrive nella shell è maggiormente visibile nel filmato originale).
08:13 | Categorie: MySQL, PHP, SQL | 0 Comments
[PHP-MySQL] Connettersi a diversi DB su host diversi attarverso una sola funzione
Se avete a che fare con DBMS su host differenti e volete uno script che sia in grado di connettersi dinamicamente a ciascuno di essi, ci si può basare sull'indirizzo del server su cui risiede il DBMS. L'esempio seguente dovete immaginarlo come il costruttore della classe DBconnect che imposta i campi dbhost (host in cui gira MySQL), dbuser (utente con cui si si collega al DB), dbpassword (password utente) e database.
In quest'esempio si fa uso di preg_match e di espressioni regolari per riconoscere l'indirizzo del server.
function DBconnect() {
// esecuzione su una LAN privata
if(preg_match("/^10\./",$_SERVER['SERVER_ADDR'])) {
$this->dbhost = "10.10.234.89";
$this->dbuser = "lan1";
$this->dbpassword = "lan1";
$this->database = "lan1";
// esecuzione su un'altra LAN privata
} else if (preg_match("/^192\./",$_SERVER['SERVER_ADDR'])) {
$this->dbhost = "192.168.9.134";
$this->dbuser = "lan2";
$this->dbpassword = "lan2";
$this->database = "lan2";
} else { // esecuzione in locale
$this->dbhost = "localhost";
$this->dbuser = "locale";
$this->dbpassword = "locale";
$this->database = "locale";
}
}
22:09 | Categorie: MySQL, PHP | 0 Comments
[SQL]La query del giorno
Si vuole produrre una query che dia come risultato dei record i cui campi della tabella sono:
- anno di riferimento per le spese;
- Totale vendite per quell'anno;
- Totale fatturato lordo;
- Totale fatturato ivato.
Però volevo che facesse tutto MySQL di modo da semplificare al massimo la gestione del risultato con PHP. Quindi ecco la query finale:
select count(*) as totFatture,
@totLordo := (select truncate(sum(fatturatoLordo),2) from table
where [conditions...]
and data between UNIX_TIMESTAMP('2007/01/01') and
unix_timestamp('2007/12/31')) as totLordo,
@totIva := @totLordo + (select truncate(sum(fatturatoIvato),2) as totIva from
table where [conditions...]
and data between UNIX_TIMESTAMP('2007/01/01')
and unix_timestamp('2007/12/31')) as totIva,
@first := 2007 as anno
from table where [conditions...] and data
between UNIX_TIMESTAMP('2007/01/01') and unix_timestamp('2007/12/31')
group by anno
UNION
select count(*) as totFatture,
@totLordo := (select truncate(sum(fatturatoLordo),2) from table
where [conditions...] between
UNIX_TIMESTAMP('2008/01/01') and unix_timestamp('2008/12/31'))
as totLordo,
@totIva := @totLordo + (select truncate(sum(fatturatoIvato),2) from fatture
where [conditions...] and data
between UNIX_TIMESTAMP('2008/01/01') and
unix_timestamp('2008/12/31')) as totIva,
@second := 2008 as anno
from tablewhere [conditions...] and data between
UNIX_TIMESTAMP('2008/01/01') and unix_timestamp('2008/12/31')
group by anno
00:07 | Categorie: MySQL, SQL | 0 Comments
[MySQL Query Browser] The memory load of the system is extremly high
Per chi non lo conoscesse ancora, MySQL Query Browser è un tool visuale, disponibile per varie piattaforme, che permette con facilità di creare, eseguire ed ottimizzare queries SQL (qui uno screenshot).
Lo consiero un'ottima alternativa al promt dei comandi che, nonostante tutto, uso lo stesso congiuntamente a questo tool.
Purtroppo però stamattina mi è comparso un errore molto strano nell'esecuzione di una query banalissima che avrebbe dovuto ritornare senza tanti fronzoli (niente join o query innestate) meno di 50 records. L'errore è:
The memory load of the system is extremly high.
In order to keep the system responsive record set retrieval
has been stopped.
In pratica MySQL QB si rifiuta di eseguire la query come se non ci fosse memoria sufficiente per eseguirla (o qualcosa di simile immagino).
Facendo una breve ricerca viene fuori che è il bug 30108, verificato da quasi 3 mesi e che interessa anche l'ultima versione stabile, la quale ha almeno un centinaio di bug all'attivo non ancora risolti.
Ad ogni mod questo bug non è facilmente ripetibile poichè dopo pochi istanti la query che prima vi dava tale errore potrebbe funzionare, complicando quindi il lavoro del team di debugging.
Resta sempre un tool molto valido comunque sia e lo consiglio vivamente.
21:28 | Categorie: MySQL | 0 Comments
[SQL] MySQL tips
Connessione e dumping
- cambiare la password di un utente:
update user set password=PASSWORD("pippo") where user="root";
flush privileges; - esportare solo le istruzioni DDL dal database:
mysqldump db_name --no-data > script_file.sql
Aggiungere--databasesse si vuole creare anche
il database al pari di altri oggetti. - avviare MySQL senza far scattare i beep per gli errori:
mysql -uroot --no-beep -p
Query
- Selezionare l'ultimo elemento della tabella:
select field1,field2, ...
from table [where=...]
order by field1 DESC limit 1;
-- oppure...
select field from table
where id=last_insert_id(); -- dove id è di tipo auto_increment
Date ed orari
- Selezionare l'ora corrente:
select now(); -- 2008-05-26 12:46:08
-- oppure...
select current_timestamp; - Selezionare solo la data corrente senza l'ora:
select CAST(now() as date); -- 2008-05-26
-- oppure...
select current_date; - Selezionare solo l'ora corrente senza la data:
select CAST(now() as time); -- 12:47:34
-- oppure...
select current_time; - Selezionare lo unix timestamp a partire da una data:
select unix_timestamp('2007/03/26 16:21:56')
-- è uguale a mktime(16,21,56,3,26,2007,-1) in PHP
23:10 | Categorie: MySQL, SQL | 2 Comments
[Link] Raccolta di cheet sheet
Qui di seguito una raccolta di "bigini" online :)
- Google: uno | due;
- Firefox | Thunderbird;
- Wordpress;
- CSS: uno | due | tre | quattro; HTML entità;
- Bash; VI; Ubuntu;
- LaTeX;
- DOS; Win32;
- Wikipedia;
- XSS; SQL Injection;
- SEO;
- Building cheat sheets in Eclipse;
Raccoglitori di cheet sheet e altro materiale
Ecco una lista di ottimi siti web che raccolgono liste di memorandum in formato PDF in merito a svariati argomenti:
Win-get: uso e creazione di un repository
Introduzione
Win-get è un packet manager a linea di comando per windows che sfrutta le funzionalità di wget,un porting per Windows del programma omonimo per Linux.
Presenta una lista di programmi via Web (quelli accessibili anche dall'applicazione) e se ci si registra si ha il vantaggio di poter cliccare su dei "+" a fianco dei nomi dell'applicazione e associare l'applicazione stessa al nostro account. In questa maniera sfrutando l'opzione "restore" di win-get,è possibile installare tutti i programmi associati al nostro profilo (specificando le credenziali di autenticazione o nel file di configurazione o come opzioni da linea di comando).
Esiste anche un ' estensione per Firefox (non ancora provata quindi non vi so dire nulla in termini di utilità e compatibilità tra le varie versioni) che permette di segnalare un'applicazione. Fate attenzione che il server non è configurato per le estensioni firefox quindi vi verrà chiesto di scaricarla. Dovrete poi installare tale estensione con "Apri con" e scegliendo Firefox o da linea di comando "firefox estensione.xpi".
Trovate un'altra recensione di questo software su newstechnology.
Funzionamento tecnico
Questo è un pogetto open source,quindi sono disponibili i sorgenti per poterci creare il nostro repository, ma NON l'interfaccia amministrativa e "perlustrativa" del sito ufficiale (in attesa di chiarimenti).
Win-get farà delle query come questa ad uno script PHP (notate i parametri inviati via GET) e si otterrà un file XML descrittivo che verrà poi gestito da Win-get e presentato nel prompt dei comandi.
Come illustra questa query e quella nella foto,sembra che questo progetto sia un repository di collegamenti alle applicazioni da scaricare e che sul server Sourceforge non abbiano messo alcun software (molto probabilmente perchè non si può nemmeno fare). Quindi se guadate al file XML ritornato dalla precedente query,l'indirizzo del file zip verrà dato in pasto a wget presumo.
Creazione di un proprio repository
Ho intenzione di creare un repository su Aruba sfruttando i files forniti,ma permettendo anche di scaricare direttamente dal server Aruba i software,dal momento che godo di spazio illimitato :-D (ma non banda illimitata presumo!). Chi è su Aruba sa che si hanno a disposizione solitamente 5 database predefiniti per un hosting da 30 sacchi l'anno (mi pare,a me hanno regalato il sottodominio quindi non ricordo :-D). Quindi l'istruzione CREATE DATABASE `w154283_winget` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; non sarà possibile. Possiamo:
- rinominare uno dei database predefiniti,azione possibile dal pannello di controllo selezionado "Operazioni";
- semplicemente modificare USE w154283_winget; con il nome del nostro database e cancellare o commentare la creazione del database.
Prendiamo quindi il dump del database e imbocchiamolo a PHPMyAdmin presente su Aruba. Il database è composto da 5 tabelle:
- applications: contiene i dati generali di un'applicazione e il link dove risiede;
- dependencies: le dipendenze per una determinata applicazione;
- errors: gli errori in riferimento alle applicazioni;
- mirrors: eventuali mirrors per una certa applicazione;
- requests: identica ad applications,mi è ancora sconosciuto il significato della sua ridondante esistenza;
Fatto questo basta caricare i file winget.php e db.php sul proprio server. L'indirizzo del proprio repository sarà quello rappresentato dalla locazione del file winget.php.
A questo punto manca tutta l'interfaccia amministrativa che il sito ufficiale presenta. Ho chiesto a Ryan se è possibile avere tali files,dal momento che su CVS di sourceforge presenta solo i 3 files menzionati.
Nel caso non fosse possibile ne costruirò una mia non appena avrò tempo :)
16:32 | Categorie: MySQL, PHP, programmazione, software, SQL, Windows | 0 Comments
Appuntamento con OilProject: DBMS a confronto
Preambolo
Stasera volevo vedermi un film,per cui ho iniziato a prenderne uno a caso dalla mia raccolta: "Un ponte per Terabithia". Beh a metà film ho smesso. Trattasi di ragazzini dalla fervida immaginazione,fervida a tal punto da arrivare a crearsi un mondo tutto loro.
Deciso a non arrendermi ho optato per "Fascisti su Marte",del buon Guzzanti. Sebbene possa sembrare carino per i primi 5 minuti,dopo diventa anch'esso schifosamente noioso. Dunque mi son detto che non era serata per i film e ho deciso di apporfondire un po' le mie conoscenze con qualche lettura che avevo a disposizione.
DBMS a confronto
Si intitola così la presentazione (disponibile in PDF o ODP,ma c'è anche l'MP3 che presenta i suoi lavori) di Nello Coppeto (aka NeCoSi),autore del sito web Geekplace e mebro della community di OilProject.
Il suo lavoro mette a confronto da un punto di vista generale e scarsamente tecnico i tre principali DBMS in circolazione:
- MySQL;
- Oracle;
- PostgreSQL;
Oracle
Nasce dal '77 e prosegue la sua evoluzione fino ad arrivare alla versione 10g del 2003,ora surclassata dalla 11g come mi fa notare un lettore. Esistono ben 5 versioni di Oracle che con mia grande sorpresa costano migliaia di dollari: si va dai 18 mila ai 275 mila dollari per licenze della versione enterprise edition a tempo indeterminato con supporto e aggiornamenti,senza contare che gli optional sono anch'essi a pagamento.
La versione liberamente scaricabile è la Express Edition,che nell'aprile del 2006 viene premiato da non ricordo chi come miglir database. Viene delineato un tratto monopolista di Oracle,che fa addirittura proposte d'acquisto di MySQL e JBoss.
Essendo software chiuso e basando la sua sicurezza su ciò che non si conosce (la più bassa forma per intenderci) ha avuto un record di inefficienza nella bug correction: quasi 2 anni per una patch!!
MySQL
Sviluppato a partire dal '95,viene usato nell'architettura LAMP e da Wikipedia,chi non lo conosce? Quel che non sapevo è che avesse due licenze:
- GPL;
- commerciale: se acquisto questa licenza e se modifico e distribuisco il software posso scegliere anche questa licenza e venderlo,annullando la viralità della GPL;
Scitto in C/C++,ha estensioni per altri DBMS come PostgreSQL. Questo non so a che livello si estenda. Supporterà le stored procedure e le funzioni trigger di PG?
Vanta numeri per 30 mila download al giorno su 5 milioni di installazioni globali.
PostgreSQL
La prima versione risale all'89 e questo DBMS open source arriva ad oggi alla versione 8. Ha una licenza BSD,quindi molto flessibile.
PostgreSQL ho avuto modo di studiarlo e approfondirlo un pochino quest'anno nel corso di basi di dati (mentre per Nello è toccato Oracle). Potete vedere i miei appunti su PotsgreSQL a questa pagina.
Conclusioni
Ho trovato la sua esposizione interessante,tant'è che ve ne sto parlando e vi invito a dargli una buona lettura (e ascolto) soprattutto se siete indecisi su quale DBMS scegliere per i vostri tornaconti e volete farvi una panoramica,anche perchè alla fine dei fatti potete scaricare liberamente dalla rete una versione di qualsiasi di questi tre DBMS.
Potete trovare i lavori di Nello su Oilproject oppure da me nella sezione riservata alle letture libere.
02:50 | Categorie: MySQL, PostgreSQL, software | 2 Comments
PHP Guestbook per i nostri siti
Listuccia:
- Hosting solutions: basato su file;
- phpbook: basato su MySQL;
- PaoBacheca: look un po' scadente...;
- e altri ancora...;
Io comunque continuo a domandarmi come mai sia così schifosamente difficile trovare le demo di applicazioni web. Non posso mica basarmi su una lapidaria descrizione,devo pur farmi un'idea vedendolo in azione! Per questo,questo e quest'artro motivo credo che sceglierò phpBook per il mio sito. Appena è pronto ve lo dico così potrete insultarmi... (cor cazzo! :-D).EDIT: phpBook non si scarica direttamente dal loro sito,ma te lo inviano via mail (???!). Ergo: optp per qualche progetto di Sourceforge,che grazie alla sua funzione di filtraggio nella ricerca ho ridotto la scelta a due progetti,MGB e phpnix.
00:24 | Categorie: MySQL, PHP | 0 Comments
Data in italiano in MySQL
Ad esempio per formattare secondo le usanze italiane la data inglese odierna (2007-12-04 17:03:08) ottenuta tramite la funzione
now() per esempio possiamo fare così:
select date_format(NOW(),"%d-%m-%Y %T");
In questo caso %d sta per giorno,%m per mese e %Y per anno,mentre %T rappresenta l'orario in hh:mm:ss. Vedere la fonte per ulteriori e più approfondite informazioni.
Fonte: il forum di HTML.it
16:56 | Categorie: MySQL | 0 Comments
Tag cloud in PHP/MySQL
Mi piacerebbe poterlo fare in AJAX ma non ho ancora molta competenza tecnica per realizzarlo così al momento,magari una seconda versione in un futuro potrà esser fatta così. Pensavo altresì di taggare le ricette e di creare delle tag cloud come siamo abituati a vederle nei blog. Riporto qui per mia utilità una serie di link per creare una tag cloud con PHP e MySQL:
- Yappy.it: php4;
- Lots of Code: php5;
- Prism Perfect: php4;
- Scriptsplayground: php4;
- Tagtagweb: php4;
- About.com: stilizzare una tag cloud;
12:24 | Categorie: MySQL, PHP | 0 Comments
Installazione architettura LAMP su Ubuntu Gutsy Desktop
Se non avete scelto fin da subito Ubuntu Server Edition,sul vostro sistema vi troverete sforniti delle componenti dell'architettura LAMP (Apache,MySQL e PHP).
- scegliere i pacchetti idonei da synaptic: basta cliccare su "Cerca" e digitare "apache","php" e "mysql". Scegliere sia il client sia il server di mysql. Eventualmente scaricare il pacchetto pear per avere le estensioni a PHP. In fase di installazione è possibile configurare graficamente Apache per PHP.
- verrà richiesta la password di root per mysql.
- verificare l'effettiva installazione del server digitando "localhost" dal browser. Dovrebbe comparire il contenuto della directory /var/www/ e mostrare la firma del server (Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6 Server at localhost Port 80). Se compare PHP nella firma (come nell'esempio riportato) il modulo è correttamente installato e il server è in grado di passare il codice PHP all'omonimo preprocessore.
- per sostituire il nostro contenuto della directory dei documenti di Apache (sotto Windows "htdocs"),rimuovere prima la directory di default (
$ sudo rm -rf /var/www/*) e spostare o copiare i files che vogliamo inserire nella driectory pubblica ($ sudo mv Desktop/backup_generale/htdocs/* /var/www/).
Siccome li abbiamo spostati con sudo,tutti i files acquisiranno i diritti di root (chmod 700),permettiamo invece la lettura anche agli altri utenti dopo esserci spostati nella directory pubblica del server da terminale (/var/www$ chmod -R 755 *).
Se volete fare un link sul desktop alla vostra directory contenente il materiale pubblico digitare:ln -s /var/www/ ~/Desktop - da ultimo testiamo la connessione a MySQL inserendo nella directory pubblica di Apache il seguente stralcio di codice fra tag PHP che qui ho omesso perch Blogger non me lo consente:
Se vi compare la seguente immagine (in cui ho erroneamente scritto "Tabelle nel database MySQL" ma nel codice ci riferiamo agli utenti nella tabella Users) è tutto a posto :)
$mysql_id = mysql_connect('localhost', 'root', 'root') or die("Connessione non riuscita: " . mysql_error());
mysql_select_db("mysql") or die("Selezione del database non riuscita");
$query = "SELECT User FROM user";
$result = mysql_query($query) or die(mysql_error());
echo "Tabelle nel database mysql
";
while($row = mysql_fetch_array($result,MYSQL_ASSOC)){
echo $row['User'];
echo "
";
}
Come si può vedere,l'installazione di LAMP è molto più rapida rispetto a Windows grazie soprattutto a repository e alla nuova versione di PHP.
16:20 | Categorie: Linux, MySQL, PHP | 6 Comments
SQL:tutorial e documentazioni
Dopo di che è il caso di cercarsi tutorial o leggerse libri al riguardo:
Un altro editor è WWW SQL Designer,che agisce via browser dopo aver settato connessioni al database.
11:16 | Categorie: MySQL, PostgreSQL, SQL | 0 Comments
MySQL: serie di blog e notizie
Volevo segnalare una serie di blog,siti e quant'altro utili per SQL e MySQL:
- Xaprb: blog interessante,con più di 200 post all'attivo nella categoria SQL.
- "Baby Steps into stored procedures": il titolo dovrebbe esser esplicativo,una breve introduzione alle procedure.
- "Fow MySQL treats security vulnearibilities": presentazione di problemi legati alla sicurezza e vecchi bollettini.
- MySQL performance blog;
- Planet MySQL: date un'occhiata al blogroll sulla destra,presenta tutta una serie di blog "MySQL related" per lo più.
10:29 | Categorie: MySQL | 0 Comments
MySQL Vs PostgreSQL: sequenze a confronto
Una nota dolente è stata la scoperta della gestione delle sequenze: mentre per MySQL possiamo definire così una sequenza (per esempio):
In PostgreSQL ci sono due modi (uno rapido e uno più elaborato). Modo rapido:
id int auto_increment primary key
E un modo più elaborato (vedi funzioni per le sequenze):
/* il seguente codice crea implicitamente una sequenza,creiamo il campo id nella tabella omettendo alcuni passaggi */
id serial primary key
E fin qua ci siamo. Ammettiamo che facciamo una serie di INSERT specificando gli ID:
CREATE SEQUENCE tablename_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647;
-- creiamo il campo id nella tabella omettendo alcuni passaggi
id int DEFAULT nextval('tablename_id_seq') primary key
In questo caso, dopo tali INSERT, se facciamo un inserimento SENZA specificare l'ID, MySQL sarà abbastanza scaltro da prelevare l'ultimo ID nella tabella e incrementarlo di uno mentre invece PostgreSQL richiamerà la sequenza creata (o quella implicita se usiamo serial),siccome non l'abbiamo mai usata, produrrà 1 come risultato,con la possibilità molto facile di causare un errore di duplicazione delle chiavi (1 è magari già presente nella tabella).
INSERT INTO table (ID,BLA,BLA) VALUES(1,'dato','dato');
Per questo concludo dicendo che in PostgreSQL è bene non specificare gli ID ma lasciare che sia la sequenza a farlo per noi,mentre in MySQL non ci sono problemi di sorta.
19:06 | Categorie: MySQL, PostgreSQL | 2 Comments
Scoprire via Web da che paese arriva una connessione
Una soluzione gratuita l'ho trovata in WebHosting: dal link indicato è possibile scaricare la versione più recente del database contenente le informazioni necessarie circa IP e paesi. Per importarlo in MySQL mi è toccato sgobbare un po': sembra che il DBMS in questione non capisca i dati se racchiusi fra virgolette (esempio "pippo","pluto",ecc). Quindi ecco i passaggi per importare il database in MySQL:
- aprire con un editor di testo il file csv e rimuovere tutte le virgolette dal file (basta usare "Trova e sostituisci" disponibile in qualsiasi editor);
- dopo aver salvato il file creare la tabella seguente in MySQL:
create table iplocation (
IP_FROM DOUBLE primary key ,
IP_TO DOUBLE ,
COUNTRY_CODE2 CHAR(2),
COUNTRY_CODE3 CHAR(3),
COUNTRY_NAME VARCHAR(50)
); - importare il file csv tramite la seguente query:
LOAD DATA LOCAL INFILE 'C:\ip-to-country.csv' INTO TABLE iplocation
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';
Un esempio di codice in PHP lo trovate qui.
16:06 | Categorie: MySQL, PHP | 1 Comments