Transcript php6

PHP VI
Adatbázisok, MySQL
phpMyAdmin
Wamp ikon
phpMyAdmin - Adatbázisok
Új adatbázis
Adatbázisok
phpMyAdmin - Tábák
Törlés
Táblák
Új tábla
phpMyAdmin - Táblák
• Hozzuk létre a ‘Persons’ táblát, 2 mezővel:
– id (bigint, not null, auto_increment, primary)
– name (varchar 255, not null, unique)
Létrehozás
phpMyAdmin - Táblák
• Hozzuk létre a ‘Currency’ táblát!
create table currency (
id bigint not null auto_increment,
name varchar(255) not null,
rate double not null,
primary key (id),
unique (name)
)
SQL parancsok
SQL parancsok
• Tábla létrehozása:
– create table (....)
• Tábla törlése:
– drop table
• Rekord beszúrása táblába:
– insert into table(...) values(...)
• Lekérdezés:
– select col1, col2... from table where ....
• Törlés:
– delete from table
• Módosítás:
– update table set(...)
Feladatok
insert into persons(name) values(‘Nikolaj’);
insert into persons(name) values(‘Svan’);
insert into persons(name) values(‘Johann’);
select * from persons;
select * from persons where name like ‘Nik%’;
select id from persons where name = ‘Svan’;
update persons set name = ‘Sven’ where id = 2;
delete from persons where name = ‘Johann’;
Idegen kulcsok
• Egy táblának egy mezője hivatkozik egy
másik tábla mezőjére. Pl ha tároljuk, hogy
kinek mennyi pénze van egy adott
pénznemből, akkor hivatkoznunk kell a
személyre, illetve a pénznemre.
create table money (
person_id bigint not null,
currency_id bigint not null,
value double not null,
foreign key(person_id) references persons(id) on update cascade on
delete restrict,
foreign key(currency_id) references currency(id) on update cascade
on delete restrict);
SQL
• http://www.w3schools.com/sql/
• http://dev.mysql.com/doc/refman/5.0/en/
• http://hu.wikipedia.org/wiki/SQL
Feladatok
• Töröljük eddigi tábláinkat (persons,
currency, money)
• A db.sql szöveges állomány az előző órai
adatbázist tartalmazza. A phpMyAdmin-nal
futtasuk le a fájlban található utasításokat.
(Copy/Paste –eljük be a teljes tartalmat és
GO)
PHP + MySQL
• Kapcsolódás:
– $conn = mysql_connect($host, $user, $pass);
• Adatbázis választás:
– mysql_select_db($db, $conn);
• Lekérdezés:
– $result = mysql_query($query, $conn);
• Adatok kinyerése:
– $record = mysql_fetch_array($result);
• Memória felszabadítás:
– mysql_free_result($result);
• Kapcsolat megszűntetése:
– mysql_close($conn);
Feladatok
$conn = mysql_connect(‘localhost’, ‘root’);
if (!$conn) die(‘connection error: ’ . mysql_error());
if (!mysql_select_db(‘mysql’, $conn))
die(‘database error: ’ . mysql_error());
$result = mysql_query(‘select id, name from persons’, $conn);
if (!result) die(‘query error: ’ . mysql_error());
while ($rec = mysql_fetch_array($result))
echo ‘id=‘ . $rec[‘id’] . ‘; name=‘ . $rec[‘name’] . ‘<br/>’;
mysql_free_result($result);
mysql_close($conn);
Biztonság
• Hozzuk létre a registration.sql –ben
megadott táblát, valamint használjuk a
login.html és auth.php állományokat.
• Teszteljük le a 3 felhasználót, hogy
helyesen működik-e a beléptető.
• Használjuk a következőket:
– Username: fake' or 1=1 or '1'='1
– Password: fake
• Kommentezzük ki az echo $query sort!
• $u=addslashes($u); $p=addslashes($p);
Serialize
• Az előző órán obejtkum serialize:
– __wakeup(), __sleep() metódus
• Adatbázis kapcsolatokat nem mentünk el! Helyette:
class Connection {
protected $conn
private $host, $user, $pass, $db;
public function __sleep() {
return array(‘host’, ‘user’, ‘pass’, ‘db’);
}
public function __wakeup() {
$this->connect();
}
private function connect() {
$this->conn = mysql_connect(.........);
}
Feladatok
• Készítsük el az előző órai DAO interfészt
megvalósító MySQL adatbázison működő
osztályunkat MySqlDAO néven.