oktatas:programozas:php:php_adatbazis:mysqli_objektumokkal
Tartalomjegyzék
MySQLi Objektumokkal
- Szerző: Sallai András
- Copyright © Sallai András, 2014, 2015, 2017, 2019, 2020
- Licenc: GNU Free Documentation License 1.3
- Web: https://szit.hu
Kapcsolódás
- connect.php
<?php $conn = new mysqli('localhost', 'erdo', 'titok', 'erdo'); if($conn->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
- createdb.php
<?php $user = 'erdo'; $pass = 'titok'; $host = 'localhost'; $conn = new mysqli($host, $user, $pass); if ($conn->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
- createtable.php
<?php $user = 'erdo'; $pass = 'titok'; $host = 'localhost'; $dbname = 'erdo'; $conn = new mysqli($host, $user, $pass, $dbname); if ($conn->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:
- insert.php
<?php $user = 'erdo'; $pass = 'titok'; $host = 'localhost'; $dbname = 'erdo'; $conn = new mysqli($host, $user, $pass, $dbname); if ($conn->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.
- elokeszitett.php
<?php $conn = new mysqli('localhost', 'erdo', 'titok', 'erdo'); if($conn->connect_error) { die('Hiba a kapcsolódás sorána!' . $conn->connect_error); } $sql = <<<EOT insert into termekek (nev, ar, mennyiseg) values (?,?,?) EOT; $stmt = $conn->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
- index.php
<?php $conn = new mysqli("localhost", "userName", "titok", "dbName"); if($conn->connect_error) die("Hiba a kapcsolódás során (" . $conn->connect_errno . ")" . $conn->connect_error); echo "Sikeres kapcsolódás...<br>"; $conn->set_charset("utf8"); $sql = "SELECT eloadoNev FROM `Előadó`"; if($result = $conn->query($sql)) { while($sor = $result->fetch_assoc()) { echo $sor["eloadoNev"] . "<br>"; } $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 = <<<EOT insert into dolgozok (nev, telepules) values ("{$data['nev']}", "{$data['telepules']}")
Adatbázis kezelő függvények
- database.php
<?php require "config.php"; function insertDolgozo($conn, $data) { $sql = "insert into dolgozok (nev, telepules) values (\"{$data['nev']}\", \"{$data['telepules']}\")"; $conn->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);
- config.php
<?php $db['host'] = "localhost"; $db['user'] = "username"; $db['pass'] = "titok"; $db['dbname'] = "dbnev";
Hibakezelés
<?php $conn = new mysqli("localhost", "username", "titok", "dbnev"); if($conn->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
<?php $conn = new mysqli("localhost", "user_nev", "jelszo", "db_nev"); if($conn->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ó
<?php function getDataAsArray() { $conn = new mysqli("localhost", "user_nev", "jelszo", "db_nev"); $sql = "select nev, telepules from szemelyek"; $res = $conn->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:
<?php $conn = new mysqli("localhost","felhasznalo","jelszó","dbnev"); // Kapcsolat ellenőrzése: if($conn->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();
oktatas/programozas/php/php_adatbazis/mysqli_objektumokkal.txt · Utolsó módosítás: 2020/12/28 23:59 szerkesztette: admin