PHP
PHP KOULUTUSTA VUONNA 2025!
-
PHP koulutus
-
WordPress PHP-devaajalle koulutus
-
MySQL koulutus
-
Apache HTTPd koulutus
-
Microsoft IIS koulutus
Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi heti! Koulutuksen järjestää asiantuntijasi Koulutus- ja konsultointipalvelu KK Mediat.
PHP ja tietokannat: PDO
PDO (PHP Data Objects) on PHP:n laajennus, joka tarjoaa yhtenäisen ja turvallisen tavan käyttää useita eri tietokantamoottoreita – mukaan lukien MySQL. PDO:n suurin etu on sen abstraktiokerros, joka mahdollistaa tietokannan vaihdon ilman suurta koodimuutosta.
Tietokantayhteyden avaaminen ja sulkeminen
<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=testikanta", "kayttaja", "salasana");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// ...
} catch (PDOException $e) {
error_log("Yhteysvirhe: " . $e->getMessage());
echo "Tietokantavirhe. Yritä myöhemmin uudelleen.";
}
?>
Vinkki: Käytä aina try-catch-rakennetta PDO:n kanssa ja aseta ERRMODE_EXCEPTION – tämä helpottaa virheiden paikantamista.
Yhden arvon hakeminen
<?php
$stmt = $pdo->query("SELECT COUNT(*) AS maara FROM testitaulu");
$maara = $stmt->fetch(PDO::FETCH_ASSOC)['maara'];
echo "Rivejä yhteensä: " . $maara;
?>
Vinkki: PDO palauttaa oletuksena sekä avain- että numeropohjaiset indeksit – käytä PDO::FETCH_ASSOC, jos haluat vain nimetyt kentät ja kevyemmän muistijäljen.
Datan hakeminen ja silmukointi
<?php
$stmt = $pdo->query("SELECT t_id, t_nimi, t_hinta FROM testitaulu");
$rivit = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (count($rivit) > 0) {
foreach ($rivit as $rivi) {
echo $rivi['t_id'] . " - " . $rivi['t_nimi'] . " - " . $rivi['t_hinta'] . "
";
}
} else {
echo "Ei tuloksia.";
}
?>
Vinkki: fetchAll() on helppo ja selkeä tapa lukea koko tulosjoukko, mutta vältä sitä suuren tulosjoukon palauttavissa kyselyissä.
fetchAll lukee koko tulosjoukon muistiin ja voi pahimmillaan kaataa koko palvelimen.
Tästä syystä perinteinen silmukkarakenne while ($row = $stmt->fetch(...))
on suorituskyvyltään parempi vaihtoehto isoilla datamäärillä.
CUD-operaatiot (Create, Update, Delete)
<?php
// INSERT
$pdo->exec("INSERT INTO testitaulu (t_nimi, t_hinta) VALUES ('Tuote A', 19.90)");
// UPDATE
$pdo->exec("UPDATE testitaulu SET t_hinta = 29.90 WHERE t_id = 1");
// DELETE
$pdo->exec("DELETE FROM testitaulu WHERE t_id = 2");
?>
Vinkki: exec()
palauttaa muokattujen rivien määrän. Tarkistamalla palautusarvo aina kun haluat tarkistaa, kuinka monta riviä kysely on oikeasti muuttunut.
Prepared statement ja PDO
<?php
$stmt = $pdo->prepare("INSERT INTO testitaulu (t_nimi, t_hinta) VALUES (:nimi, :hinta)");
$stmt->execute([
':nimi' => "Tuote B",
':hinta' => 24.90
]);
?>
Vinkki: Käytä nimettyjä parametreja kuten (:nimi, :hinta)
– ne parantavat luettavuutta ja ovat helppoja yhdistää mm. lomakekenttiin.
Virheenkäsittely ja debuggaus PDO:n avulla
<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=testikanta", "kayttaja", "salasana", [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
// ...
} catch (PDOException $e) {
error_log("PDO-virhe: " . $e->getMessage());
echo "Tietokantavirhe. Ota yhteyttä ylläpitoon.";
}
?>
Vinkki: Älä koskaan tulosta tarkkaa virheilmoitusta käyttäjälle.