PHP

PHP KOULUTUSTA VUONNA 2025!

Kurssit saatavilla kautta Suomen. Tule ja varaa oma koulutustapahtumasi heti! Koulutuksen järjestää asiantuntijasi Koulutus- ja konsultointipalvelu KK Mediat.

PHP ja MySQL: mysqli-laajennuksen käyttö

mysqli (MySQL Improved) on PHP:n tarjoama laajennus, joka mahdollistaa turvallisen ja tehokkaan kommunikoinnin MySQL-tietokantojen kanssa. Se on seuraaja vanhalle mysql_*-laajennukselle, joka poistettiin käytöstä PHP 7.0 -versiossa. mysqli tuo mukanaan joukon parannuksia suorituskykyyn, tietoturvaan ja ohjelmointityyleihin.

Tietokantayhteyden avaaminen ja sulkeminen


<?php
$mysqli = new mysqli("localhost", "kayttaja", "salasana", "testikanta");

if ($mysqli->connect_error) {
    die("Yhteys epäonnistui: " . $mysqli->connect_error);
}

$mysqli->close();
?>

Vinkki: Avaa yhteys mahdollisimman myöhään ja sulje se mahdollisimman aikaisin. Älä koskaan luota PHP:n automaattiseen sulkemiseen tuotantokoodissa.

Yhden arvon hakeminen


<?php
$tulos = $mysqli->query("SELECT COUNT(*) AS maara FROM testitaulu");
$rivi = $tulos->fetch_assoc();
echo "Rivejä yhteensä: " . $rivi['maara'];
$tulos->free();
?>


Vinkki: Jos haet vain yhtä arvoa, tee se eksplisiittisesti turhaa silmukointia välttäen.

Datan hakeminen ja silmukointi


<?php
$tulos = $mysqli->query("SELECT t_id, t_nimi, t_hinta FROM testitaulu");

if ($tulos->num_rows > 0) {
    while ($rivi = $tulos->fetch_assoc()) {
        echo $rivi['t_id'] . " - " . $rivi['t_nimi'] . " - " . $rivi['t_hinta'] . "
"; } } else { echo "Ei tuloksia."; } $tulos->free(); ?>

Vinkki: Tarkista aina, että tulosjoukko ei ole tyhjä ennen silmukointia – muuten käyttäjä näkee helposti tyhjän näkymän ilman syytä.

CUD-operaatiot (Create, Update, Delete)


<?php
// INSERT
$mysqli->query("INSERT INTO testitaulu (t_nimi, t_hinta) VALUES ('Tuote A', 19.90)");

// UPDATE
$mysqli->query("UPDATE testitaulu SET t_hinta = 29.90 WHERE t_id = 1");

// DELETE
$mysqli->query("DELETE FROM testitaulu WHERE t_id = 2");
?>


Vinkki: Varmista, että tiedät varmasti mitä olet muuttamassa — käytä aina WHERE-ehdot, ja testaa INSERT/UPDATE/DELETE ensin komentoriviltä ennen kuin laitat sen tuotantoon.

Prepared statement


<?php
$stmt = $mysqli->prepare("INSERT INTO testitaulu (t_nimi, t_hinta) VALUES (?, ?)");
$stmt->bind_param("sd", $nimi, $hinta); // s = string, d = double

$nimi = "Tuote B";
$hinta = 24.90;
$stmt->execute();

$stmt->close();
?>

Vinkki: käytä prepared statementteja aina kun vastaanotat ulkopuolelta tulevia syötteitä (evästeet,lomakkeet,kyselymerkkijonot ym).

Virheenkäsittely ja debuggaus


mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $mysqli = new mysqli("localhost", "kayttaja", "salasana", "testikanta");
    // ...
} catch (mysqli_sql_exception $e) {
    error_log("Yhteysvirhe: " . $e->getMessage());
    echo "Tietokantavirhe. Yritä myöhemmin uudelleen.";
}


Vinkki: Lokita aina virheet, mutta näytä käyttäjälle vain geneerinen viesti – tämä on yksinkertaisin tapa estää tietovuodot hyökkääjälle.