[[oktatas:programozás:php:php adatbázis|< PHP adatbázis]] ====== MySQLi Objektumokkal ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2014, 2015, 2017, 2019, 2020 * Licenc: GNU Free Documentation License 1.3 * Web: https://szit.hu ===== Kapcsolódás ===== connect_error) { die('Hiba a kapcsolódás során!' . $conn->connect_error); } $conn->set_charset("utf-8"); echo 'Sikeres kapcsolódás...' . $conn->host_info . "\n"; $conn->close(); ===== Adatbázis létrehozása ===== connect_error) { die("Hiba a kapcsolódás során" . $conn->connect_error); } $sql = "create database erdo"; if ($conn->query($sql) === TRUE) { echo "Az adatbázis létrejött"; } else { echo "Hiba az adatbázis létrehozása során!"; echo mysqli_error($conn); } $conn->close(); ===== Tábla létrehozása ===== connect_error) { die("Hiba a kapcsolódás során" . $conn->connect_error); } $sql = "create table dolgozok ( az int not null primary key auto_increment, vnev varchar(30), knev varchar(30), telepules varchar(30), fizetes double )"; if ($conn->query($sql) === TRUE) { echo "A tábla létrejött"; } else { echo "Hiba a tábla létrehozása során!"; echo mysqli_error($conn); } $conn->close(); ===== Beszúrás ===== $sql = "INSERT INTO users (user, pass) VALUES ('kati', 'titok')"; $conn->query($sql); Teljes kód, kicsit más mezőkkel: connect_error) { die("Hiba a kapcsolódás során" . $conn->connect_error); } $sql = "insert into dolgozok (vnev, knev, telepules, fizetes) values ('Petri', 'István', 'Szeged', 1950000) "; if ($conn->query($sql) === TRUE) { echo "A beszúrás megtörtént"; } else { echo "Hiba a rekord beszúrása során!"; echo mysqli_error($conn); } $conn->close(); ===== Beszúrt rekord azonosítója ===== $sql = "INSERT INTO users (user, pass) VALUES ('kati', 'titok')"; $conn->query($sql); printf ("Új rekord azonosítója: %d.\n", $conn->insert_id); Az utolsó printf() függvénnyel -- ez opcionális -- kiíratjuk az automatikusan generált azonosítót. ===== Beszúrás ellenőrzése ===== Beszúró lekérdezés sikerének ellenőrzése: if ($conn->query("CREATE TEMPORARY TABLE Városom LIKE Város") === TRUE) { printf("A Városom tábla sikeresen létrejött\n"); } ===== Előkészített beszúrás ===== Angolosan: Prepared Statements. Előkészítem az SQL utasítás, de nem adom meg az adatokat, csak később. connect_error) { die('Hiba a kapcsolódás sorána!' . $conn->connect_error); } $sql = <<prepare($sql); $stmt->bind_param("sdd", $nev, $ar, $mennyiseg); $nev="áfonya"; $ar=370; $mennyiseg=310; $stmt->execute(); $nev="dió"; $ar=870; $mennyiseg=210; $stmt->execute(); $stmt->close(); $conn->close(); echo "Az adatok felvéve"; Vegyük észre az SQL utasításban a kérdőjeleket. insert into termekek (nev, ar, mennyiseg) values (?,?,?) ===== Lekérdezés ===== connect_error) die("Hiba a kapcsolódás során (" . $conn->connect_errno . ")" . $conn->connect_error); echo "Sikeres kapcsolódás...
"; $conn->set_charset("utf8"); $sql = "SELECT eloadoNev FROM `Előadó`"; if($result = $conn->query($sql)) { while($sor = $result->fetch_assoc()) { echo $sor["eloadoNev"] . "
"; } $result->free(); } else { echo "Lekérés hiba"; } $conn->close();
A karakterkódolás beállítása nagyon fontos, ha ékezetes tábla és mezőnevekkel dolgozunk! A lekérés során, hány rekordot kaptunk: $darabszam = $result->num_rows; ===== SQL paraméterek asszociatív tömbből ===== $sql = "insert into dolgozok (nev, telepules) values (\"{$data['nev']}\", \"{$data['telepules']}\")"; Heredoc szintaxis példa: $sql = << ===== Adatbázis kezelő függvények ===== query($sql); } function dbopen() { global $db; $conn = new mysqli($db['host'], $db['user'], $db['pass'], $db['dbname']); if($conn->connect_error) die("Hiba a kapcsolódás során (" . $conn->connect_errno . ")" . $conn->connect_error); $conn->set_charset("utf8"); return $conn; } function dbclose($mysqli) { $conn->close(); } A data egy tömb. A tömböt átadjuk paraméterként, meg a megnyitott kapcsolatobjektumot: Így hívjuk meg: $conn = dbopen(); $data = array( nev => $_POST['nev'], telepules => $_POST['telepules'] ); insertDolgozo($con, $data); ===== Hibakezelés ===== connect_errno) { print "Hiba a kapcsolódás során!"; printf("A hiba oka: %s\n", $conn->connect_error); exit(); } $sql = "insert into users (user, pass) values ('peti', 'titok')"; $conn->query($sql); if($conn->sqlstate != 0) print "Hiba a lekérdezéseben!"; $conn->close(); ===== Iterátor használata ===== connect_error) { die('Hiba a kapcsolódás sorána!' . $conn->connect_error); } $sql = "select nev, telepules from szemelyek"; foreach( $conn->query($sql) as $row) { printf("%s %s\n, $row['nev'], $row['telepules']); } $conn->close(); ===== Egysoros iteráció ===== query($sql); for( $datar = array(); $row = $res->fetch_assoc(); $datar[] = $row); $conn->close(); return $datar; } ===== Real escape ===== A biztonság érdekében felhasználók által bevitt adatokat átalakítjuk: $user = $conn->real_escape_string($_POST['user']); Teljes példakód: connect_errno) { print "Hiba a kapcsolódás során!"; printf("A hiba oka: %s\n", $conn->connect_error); exit(); } $user = $conn->real_escape_string($_POST['user']); $name = $conn->real_escape_string($_POST['name']); $sql="insert into dolgozok (user, name) VALUES ('$user', '$name')"; if ($conn->query($sql) === TRUE) { printf("A végrehajtás sikeres\n"); } $conn->close(); * http://php.net/manual/en/mysqli.real-escape-string.php