[[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