'."\n";
}
// tulostaa XHTML-sivun lopputagit
public function tulosta_loppu() {
echo ''."\n";
echo ''."\n";
}
}
// luokka tietokannan käsittelylle
class kanta {
private $dbh;
// konstruktori, jossa kantaan luodaan yhteys
function __construct($kanta) {
try {
$this->dbh = new PDO($kanta);
}
catch(PDOException $e) {
print($e->getMessage());
}
}
function __destruct() {
}
// metodi hakee kaikki elokuvat ja niihin liittyvät näyttelijät kannasta
// aakkosten mukaan järjestäminen tehdään jo SQL-lauseessa
public function hae_elokuvat_ja_nayttelijat() {
$sql = $this->dbh->prepare('SELECT Movie.MovieName AS MovieName,
Actor.ActorName AS ActorName FROM Movie
LEFT OUTER JOIN Participates ON Movie.MovieID = Participates.Movie_MovieID
LEFT OUTER JOIN Actor ON Participates.Actor_ActorID = Actor.ActorID
ORDER BY Movie.MovieName, Actor.ActorName ASC');
if(!$sql) {
print_r($this->dbh->errorInfo());
return false;
}
$ok = $sql->execute();
if(!$ok) {
print_r($sql->errorInfo());
return false;
} else {
return $sql;
}
}
// metodi hakee kaikki näyttelijät kannasta
public function hae_nayttelijat() {
$sql = $this->dbh->prepare('SELECT * FROM Actor ORDER BY ActorName ASC');
if(!$sql) {
print_r($this->dbh->errorInfo());
return false;
}
$ok = $sql->execute();
if(!$ok) {
print_r($sql->errorInfo());
return false;
} else {
return $sql;
}
}
// metodi lisää kantaan uuden elokuvan ja kiinnittää siihen valitut näyttelijät
// lisättävät tiedot tuodaan parametreinä
// rajoitteet (ei saa lisätä kahta samannimistä) hoidetaan suoraan kannassa UNIQUE:n avulla
// lisäyksessä käytetään transaktioita
public function lisaa_elokuva($leffa,$nayttelijat) {
$this->dbh->beginTransaction();
$sql = $this->dbh->prepare('INSERT INTO Movie (MovieName) VALUES (:elokuva)');
if(!$sql) {
print_r($this->dbh->errorInfo());
$this->dbh->rollBack();
return false;
}
$sql->bindParam(":elokuva",trim($leffa));
$ok = $sql->execute();
if(!$ok) {
//print_r($sql->errorInfo());
$this->dbh->rollBack();
return false;
}
$leffaid = $this->dbh->lastInsertID();
foreach($nayttelijat as $nayttelija) {
if($nayttelija!=0) {
$sql = $this->dbh->prepare('INSERT INTO Participates VALUES (:elokuva, :nayttelija)');
if(!$sql) {
print_r($this->dbh->errorInfo());
$this->dbh->rollBack();
return false;
}
$sql->bindParam(":elokuva",$leffaid);
$sql->bindParam(":nayttelija",$nayttelija);
$ok = $sql->execute();
if(!$ok) {
print_r($sql->errorInfo());
$this->dbh->rollBack();
return false;
}
}
}
$this->dbh->commit();
return true;
}
// metodi tulostaa elokuvat ja niihin liittyvät näyttelijät taulukon riveinä
public function tulosta_elokuvat_ja_nayttelijat($sql) {
while($rivi = $sql->fetch(PDO::FETCH_ASSOC)) {
echo "