PHP jätkukursus MySQL Improved Andmete sisestamine MySQLiga on PHP seotud pikka aega. Mõlemad lihtsalt samale sihtgrupile mõeldud vahendid ning täiendavad teineteist. Üheks märgatavaks puuduseks on siin aga olnud ettevalmistatud päringute puudumine - abivahend, mis mitmete teiste programmeerimiskeelte juures olemas, aga siin veel mitte. Kasu sellest vähemasti kahes kohas: korduvalt sama päringut käivitades läheb vahekihil vähem aega päringulause analüüsiks; samuti pole ettevalmistatud päringute kaudu vaja nõnda palju muretseda, kas kasutajalt tulnud vigased või pahatahtlikud sümbolid võiksid midagi kurja korda saata. Eks kui sellised andmed juba süsteemis, siis muudes kohtades nad tekitavad ikkagi peavalu. Aga vähemasti pole üksühest seost, et kui kontrollimata andmed veebiväljadelt tulevad, et siis nad võiks kohe käima minna ning lasta urgitsejal serveri omadusi katsetada. Vastav moodul on mõnes distributsioonis kohe küljes ja kättesaadav, teisel juhul tuleb see eraldi võtmega aktiveerida või sootuks juurde kompileerida. Kui aga kord küljes, siis peaks ikka ühtviisi töötama. Andmete vahetamiseks tuleb ikka kõigepealt andmebaasiga ühendus saada. Parameetriteks masinanimi, kasutajanimi, parool ning baasi nimi. $yhendus=mysqli_connect("localhost", "root", "", "proov1db"); Päringu ettevalmistamise juures pannakse sisestatavate väärtuste kohale küsimärgid. $st=mysqli_prepare($yhendus, "INSERT INTO kalad(liik, kogus) values (?, ?)"); Siis seotakse küsimärkide kohad järjekorras muutujatega. Esimeseks parameetriks too ettevalmistatud päring, teiseks sõne, kus iga sümbol määrab järgnevate parameetrite tüübi. Täht s tähistab stringi, i täisarvu (integer), d reaalarvu (double) ning b binaarobjekti (blob). mysqli_stmt_bind_param($st, "si", $liik, $kogus); //string, integer Edasi tuleb lihtsalt muutujatele soovitud väärtused anda ning päring käima panna. $liik="haug"; $kogus=3; mysqli_stmt_execute($st); Ja mitme väärtuse puhul toimingut korrata. $liik="ahven"; $kogus=2; mysqli_stmt_execute($st); Kui töö tehtud, siis ikka ühendus kinni. mysqli_close($yhendus); Ja käivitatav kood tervikuna. Eeldab, et vastava nimega baas sellise kasutajanime ja tabeliga olemas on. Objektorienteeritud lähenemine Programmide suuremaks kasvades aitab objektorienteeritus koodi ja teemasid enam struktueerida. Arvatavasti ka sellepärast on siia paketti juurde toodud objektitüüp mysqli, mille eksemplaride abil saab andmebaasiga vajalikud toimingud ära teha. Loomine nagu objekti juures ikka, vajalikud parameetrid kaasa. $yhendus=new mysqli("localhost", "root", "", "proov1db"); Andmete lisamine nagu eelnevalt seletatud. Ainukeseks erinevuseks, et käske ei kutsuta välja globaalfunktsioonidena, vaid nee käivitatakse konkreetse objektieksemplari küljest. $st=$yhendus->prepare("INSERT INTO kalad(liik, kogus) values (?, ?)"); $st->bind_param("si", $liik, $kogus); //string, integer $liik="kiisk"; $kogus=2; $st->execute(); $liik="räim"; $kogus=11; $st->execute(); Ning kui on tahtmist või vajadust kätte saada vaid üks andmerida, siis saab selle teha ühe käsuga. Andmete vaatamise juures arv 0 muutuja $rida juures tähendab, et andmed võetakse massiivi veerust number 0, ehk siis kõige esimesest veerust. $lause="SELECT sum(kogus) AS kokku FROM kalad"; $rida=$yhendus->query($lause)->fetch_array(); echo "kalu kokku: ".$rida[0]."
"; Ja ikka ühendus kinni. $yhendus->close(); Ning katsetatav kood tervikuna. prepare("INSERT INTO kalad(liik, kogus) values (?, ?)"); $st->bind_param("si", $liik, $kogus); //string, integer $liik="kiisk"; $kogus=2; $st->execute(); $liik="räim"; $kogus=11; $st->execute(); $lause="SELECT sum(kogus) AS kokku FROM kalad"; $rida=$yhendus->query($lause)->fetch_array(); echo "kalu kokku: ".$rida[0]."
"; $yhendus->close(); ?> Kui vastuses ridu rohkem, siis tuleb ikka tsükliga neid püüdma minna. query($lause); while($rida=$vastus->fetch_array()){ echo "$rida[liik]
"; } $yhendus->close(); ?> Väljundparameetrid Sarnaselt, nagu saab sisendväärtusi muutujatega siduda ja sealt otse sisse lugeda, sarnaselt saab ka väljundisse tulevad väärtused otse muutujatesse paigutada. Vastavaks käsuks bind_result, ning päringus tulnud väärtuste järjekorras saab need kätte. Iga fetch-käsuga antakse päringu järgmisest reast tulevad andmed muutujatesse. prepare($lause); $st->bind_param("s", $liik); $st->bind_result($liikout, $kogus); $liik="kiisk"; $st->execute(); while($st->fetch()){ echo "$liikout $kogus
"; } $yhendus->close(); ?> Objektid x=10; echo $p->x; ?> $element; ?> x." ".$p->y." ".$p->z; ?> x=$ux; $this->y=$uy; } public function kysiX(){ return $this->x; } } $p=new Punkt(3, 5); echo $p->kysiX(); echo $p->x; ?> /* 3 Fatal error: Cannot access private property Punkt::$x in D:\xampp\htdocs\oma\0611\punkt2_php5.php on line 15 */