PHP Essentials - (SQL)

Transcript

PHP Essentials - (SQL)
PHP ESSENTIALS #10
By WI400 Team
: database e sql

sql

“dialetto” e sintassi
SQL: Sintassi SQL

E’ possibile inserire un record con l’istruzione SQL
INSERT:
INSERT
INTO users
VALUES (‘mario', md5(‘mario'), ‘Mario', ‘Rossi');
|3
| 13/05/10
SQL: Sintassi SQL

E’ possibile specificare solo le colonne che vogliamo
valorizzare quando vogliamo inserire un nuovo record:
INSERT
INTO users (username, password)
VALUES (‘mario’, md5(‘mario’));
|4
| 13/05/10
SQL: Sintassi SQL


|5
E’ possibile aggiornare il contenuto di un record con
l’istruzione SQL UPDATE:
UPDATE users
SET nome = ‘Marco';
La precedente istruzione aggiorna tutti i record.
Utilizzare la clausola WHERE per limitare i record da
aggiornare:
UPDATE users
SET nome = ‘Nuovo valore'
WHERE username = ‘Vecchio valore'
OR username = ‘Vecchio valore 2';
| 13/05/10
SQL: Sintassi SQL


|6
E’ possibile selezionare i record di una tabella con
l’istruzione SQL SELECT:
SELECT username
FROM users;
La precedente istruzione seleziona solo la colonna
username di tutti i record della tabella. E’ possibile
limitare il numero dei record da estrarre con la clausola
WHERE:
SELECT *
FROM users
WHERE username = 'Chris';
| 13/05/10
SQL: Sintassi SQL


|7
Per cancellare i record, usare l’istruzione SQL DELETE:
DELETE
FROM users;
La precedente istruzione elimina tutti i record della
tabella. E’ possibile limitare il numero dei record da
cancellare con la clausola WHERE:
DELETE
FROM users
WHERE username = ‘mario';
| 13/05/10

Databases
SQLite

MySQL

Databases: SQLite




|9
SQLite è stato introdotto con il PHP 5.
SQLite usa un file per la memorizzazione dei dati e
non richiede un server SQL esterno.
Tutto viene gestito in librerie client, questo significa
che il PHP offre tutte le funzionalità senza avere la
necessità di dipendere da entità esterne come
MySQL.
SQLite supporta SQL.
| 13/05/10
Databases: SQLite

Esempio con SQLite
<?php
<?php
$username
$username == 'user';
'user';
$password
=
'mypass';
$password = 'mypass';
$db
$db == sqlite_open
sqlite_open (( 'db.sqlite'
'db.sqlite' );
);
$sql_username
=
sqlite_escape_string
$sql_username = sqlite_escape_string (( $username
$username );
);
$sql_password
$sql_password == md5
md5 (( $password
$password );
);
$sql
=
"INSERT
INTO
users
(username,
$sql = "INSERT INTO users (username, password)
password)
VALUES
('$sql_username‘,
'$sql_password')";
VALUES ('$sql_username‘, '$sql_password')";
sqlite_query
sqlite_query (( $db,
$db, $sql
$sql )) or
or exit
exit (( 'ERROR'
'ERROR' );
);
| 10
| 13/05/10
Databases: SQLite

La funzione sqlite_open() restituisce l’handle al database

L’handle è utilizzato in molte altre funzioni SQLite



| 11
sqlite_query() è la funzione che esegue le query SQL.
Restituisce il result set
Altre funzioni utili sono sqlite_num_rows(),
sqlite_fetch_array(), e sqlite_fetch_all().
SQLite ha anche un’interfaccia OO
| 13/05/10
Databases: MySQL


| 12
MySQL è il database più popolare utilizzato con il
PHP.
Il vantaggio primario di MySQL è la velocità e la
scalabilità.
| 13/05/10
Databases: MySQL - accesso


L'accesso al Database avviene attraverso le estensioni
previste per il DB stesso
I dati fondamentali per creare una connessione sono:
- host
- user
- pw
- database (schema)
<?php
<?php
//
// Connessione
Connessione ee query
query al
al DB
DB
$conn
=
mysql_connect($dbhost,
$conn = mysql_connect($dbhost, $dbuser,
$dbuser, $dbpasswd);
$dbpasswd);
mysql_selectdb($dbname);
mysql_selectdb($dbname);
| 13
| 13/05/10
Databases: MySQL – check errors

E' possibile controllare, per ogni fase, i possibili errori
comunicati dal DB
if(!$conn)
if(!$conn) {{
die('connessione
die('connessione non
non riuscita'.mysql_error());
riuscita'.mysql_error());
}}
| 14
| 13/05/10
Databases: MySQL - lettura

L'esecuzione di una query all'interno del DB è
l'esecuzione di una specifica istruzione di
- lettura
- cancellazione
- aggiornamento
- inserimento
<?php
<?php
//
// esecuzione
esecuzione istruzione
istruzione sql
sql nel
nel DB
DB
$sql
=
“SELECT
*
FROM
utenti
WHERE
$sql = “SELECT * FROM utenti WHERE nome='$nome'
nome='$nome'
AND
cognome='$cognome'";
AND cognome='$cognome'";
$risultato
=
mysql_query(
$risultato = mysql_query( $conn,
$conn, $sql);
$sql);
| 15
| 13/05/10
Databases: MySQL - cancellazione

L'esecuzione di una query all'interno del DB è
l'esecuzione di una specifica istruzione di
- lettura
- cancellazione
- aggiornamento
- inserimento
<?php
<?php
//
// esecuzione
esecuzione istruzione
istruzione sql
sql nel
nel DB
DB
$sql
=
“delete
*
FROM
utenti
WHERE
$sql = “delete * FROM utenti WHERE codice='$cod'”;
codice='$cod'”;
$risultato
=
mysql_query($conn,
$sql);
$risultato = mysql_query($conn, $sql);
| 16
| 13/05/10
Databases: MySQL - update

L'esecuzione di una query all'interno del DB è
l'esecuzione di una specifica istruzione di
- lettura
- cancellazione
- aggiornamento
- inserimento
<?php
<?php
//
// esecuzione
esecuzione istruzione
istruzione sql
sql nel
nel DB
DB
$sql
=
“update
utenti
set
nome='$nome'
$sql = “update utenti set nome='$nome' where
where
codice='$cod'”;
codice='$cod'”;
$risultato
$risultato == mysql_query($conn,
mysql_query($conn, $sql);
$sql);
| 17
| 13/05/10
Databases: MySQL - insert

L'esecuzione di una query all'interno del DB è
l'esecuzione di una specifica istruzione di
- lettura
- cancellazione
- aggiornamento
- inserimento
<?php
<?php
//
// esecuzione
esecuzione istruzione
istruzione sql
sql nel
nel DB
DB
$sql
=
“insert
into
utenti
(codice,
$sql = “insert into utenti (codice, nome,
nome, indirizzo)
indirizzo)
values('$nome',
'$cod',
'$indir')”;
values('$nome', '$cod', '$indir')”;
$risultato
$risultato == mysql_query($conn,
mysql_query($conn, $sql);
$sql);
| 18
| 13/05/10
Databases: MySQL – retrieve data


La lettura dei dati dal php avviene attraverso la
specifica funzione prevista per il DB
I dati verranno tornati dalla funzione in formato di array
associativa
<?php
<?php
//
// Ricava
Ricava ii dati
dati
if
($riga
=
mysql_fetch_assoc($risultato))
if ($riga = mysql_fetch_assoc($risultato)) {{
$profile1=$riga['campo1'];
$profile1=$riga['campo1'];
$profile2=$riga['campo2'];
$profile2=$riga['campo2'];
$profile3=$riga['campo3'];
$profile3=$riga['campo3'];
}}
| 19
| 13/05/10
Databases: MySQL – retrieve data

E' possibile “scorrere” l'intero record-set attraverso
le normali funzioni php:
- while()
<?php
<?php
//
// ciclo
ciclo lettura
lettura dei
dei record
record
while
($row=mysql_fetch_assoc($ret))
while ($row=mysql_fetch_assoc($ret)) {{
print
print "<tr>";
"<tr>";
print
print "<td>".$row['name']."</td>";
"<td>".$row['name']."</td>";
print
"<td>".$row['address']."</td>";
print "<td>".$row['address']."</td>";
print
print "<td>".$row['city']."</td>";
"<td>".$row['city']."</td>";
print
"</tr>";
print "</tr>";
}}
| 20
| 13/05/10
Esercizio 20



| 21
Creare due file - entra.php e login.php.
Creare una form HTML nel file entra.php che accetta
username e password e li invia al file login.php.
Nel file login.php, controllare che esista un record nella
tabella users che abbia username uguale al nome utente
inserito nella form HTML e password uguale alla
password inserita nella form HTML.
| 13/05/10
Esercizio 20: solution

login.html:
<form
<form action="login.php"
action="login.php" method="POST">
method="POST">
<p>Username:
<input
type="text"
<p>Username: <input type="text" name="username"
name="username" /></p>
/></p>
<p>Password:
<input
type="password"
name="password"
<p>Password: <input type="password" name="password" /></p>
/></p>
<p><input
<p><input type="submit"
type="submit" value="Log
value="Log In"
In" /></p>
/></p>
</form>
</form>
| 22
| 13/05/10
Esercizio 20: solution

login.php:
<?php
<?php
mysql_connect
mysql_connect (( 'localhost',
'localhost', 'user',
'user', 'pass'
'pass' );
);
mysql_select_db
(
'mydatabase'
);
mysql_select_db ( 'mydatabase' );
$user
$user == mysql_real_escape_string
mysql_real_escape_string (( $_POST
$_POST ['username']
['username'] );
);
$pass
=
mysql_real_escape_string
(
$_POST
['password']
);
$pass = mysql_real_escape_string ( $_POST ['password'] );
$sql
$sql == "SELECT
"SELECT **
FROM
FROM users
users
WHERE
username
WHERE username == '$user'
'$user'
AND
password
AND
password == '$pass'";
'$pass'";
$result
=
mysql_query
(
$sql
$result = mysql_query ( $sql );
);
if
(mysql_num_rows
(
$result
))
if (mysql_num_rows ( $result )) {{
/*
/* Success
Success */
*/
}}
| 23
| 13/05/10
QUESTION TIME ?
Nome_____________
Nome_____________
Cognome______________
Cognome______________
Data___________
Data___________
ARRIVEDERCI
TITOLO
| 26
| 13/05/10