Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:php:php_adatbazis:mysqli_objektumokkal

< PHP adatbázis

MySQLi Objektumokkal

  • Szerző: Sallai András
  • Copyright © Sallai András, 2014, 2015, 2017, 2019, 2020
  • Licenc: GNU Free Documentation License 1.3

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