LXXIX. MySQL függvények

Bevezetés

E függvények segítségével érheted el a MySQL adatbázisokat. A MySQL-ről további információt a http://www.mysql.com/ címen találsz. A MySQL dokumentációját pedig a http://dev.mysql.com/doc/ címen találod.

Követelmények

Ahhoz, hogy ezeket a függvényeket használhasd, a PHP-t MySQL támogatással kell lefordítanod.

Telepítés

Ha a PHP-t a --with-mysql[=DIR] opcióval fordítod, a PHP hozzá tud férni MySQL adatbázisokhoz.

Figyelem

A PHP rendszer-összeomlás és indítási problémák fordulhatnak elõ, ha a recode kiterjesztéssel együtt használod a MySQL modult. Lásd a recode kiterjesztést további információért.

PHP 4-ben a --with-mysql opció alapértelmezett esetben be van állítva, de használhatod a --without-mysql konfigurációs beállítást ennek kikapcsolására. Szintén PHP 4-ben, ha nem adod meg az opció után a mysql elérési útvonalát, akkor a php a beépített mysql kliens könyvtárat fogja használni. Windows esetén nincsen DLL, egyszerûen be van építve a PHP 4-be. Azok a felhasználók, akik más alkalmazásokat is használnak, amelyek mysql-t használnak (például auth-mysql-t), akkor mindig meg kell adni a mysql elérési útvonalát a --with-mysql=/path/to/mysql formában. Ez ki fogja kényszeríteni, hogy a meglévõ mysql kliens könyvtárat használja a php, elkerülve az ebbõl adódó ütközéseket.

A PHP 5-ben a MySQL már nincs alapértelmezetten beállítva, mint ahogyan a mysql kliens könyvtár sincs beépítve. Ennek okait ebben a Gy.I.K.-ban találod.

Megjegyzés: Ennek eredményeképpen a Windows-t használóknak engedélyezniük kell a php_mysql.dll-t a php.ini-ben, valamint be kell másolniuk a libmysql.dll-t a Windows system könyvtárába vagy a PATH-ba.

Ez megszünteti az "Unable to load dynamic library './php_mysql.dll'" hibát.

A fordításhoz egyszerûen használható a --with-mysql=[DIR] ahol a [DIR] arra a könyvtárra mutat, ahova a MySQL telepítve van.

Ez a MySQL kiterjesztés nem támogatja a 4.1.0-nál nagyobb verziószámú MySQL teljes szolgáltatáskészletét. Ehhez használd a MySQLi-t.

Ha szeretnéd a mysql és a mysqli kiterjesztéseket együtt használni, akkor ugyanazt a kliens könyvtárat kell használnod a konfliktusok elkerülése végett.

Figyelem

A mysql és a recode kiterjesztések együttes használata esetén, betöltésekor elõfordulhatnak PHP összeomlás- és indulási problémák. Lásd a recode kiterjesztést.

Megjegyzés: Ha a latin (default) helyett más karakterkészletet szeretnél használni, külsõ (nem beépített), karakterkészlet támogatással fordított libmysql-t kell használnod.

Futásidejű beállítások

Az alábbi függvények viselkedése befolyásolható a php.ini segítségével.

A MySQL függvények viselkedését a globális php.ini nevû konfigurációs fájlban tudod beállítani.

Táblázat 1. MySQL konfigurációs beállítások

NévAlapértelmezésHol állítható
mysql.allow_persistent"On"PHP_INI_SYSTEM
mysql.max_persistent"-1"PHP_INI_SYSTEM
mysql.max_links"-1"PHP_INI_SYSTEM
mysql.trace_mode"Off"PHP_INI_ALL
mysql.default_portNULLPHP_INI_ALL
mysql.default_socketNULLPHP_INI_ALL
mysql.default_hostNULLPHP_INI_ALL
mysql.default_userNULLPHP_INI_ALL
mysql.default_passwordNULLPHP_INI_ALL
mysql.connect_timeout"0"PHP_INI_SYSTEM
A PHP_INI_* állandók meghatározást és további részleteket találsz az ini_set() függvény leírásánál.

A témába vágó konfigurációs direktívák rövid leírása

mysql.allow_persistent boolean

Állandó kapcsolatok engedélyezése.

mysql.max_persistent integer

Az állandó MySQL kapcsolatok maximális száma folyamatonként.

mysql.max_links integer

A MySQL kapcsolatok maximális száma folyamatonként. (Ebbe az állandó kapcsolatok is beszámítanak)

mysql.trace_mode boolean

Nyomkövetõ mód. Amikor a mysql.trace_mode be van kapcsolva, a tábla/index pásztázás, felszabadítatlan eredményhalmazok, SQL hibák esetén keletkezõ figyelmeztetések kiíródnak. (A PHP 4.3.0-tól került bevezetésre)

mysql.default_port string

Az alapértelmezett TCP port, amelyet a PHP akkor használ, ha nincs portszám megadva. Ha nincs más alapértelmezés megadva, akkor a MYSQL_TCP_PORT környezeti változóból, majd a /etc/services fájl mysql-tcp bejegyzésébõl, végül a fordításkor megadott MYSQL_PORT állandóból próbálja meg kideríteni a PHP. A windows alatt csak a MYSQL_PORT állandóval próbálkozik.

mysql.default_socket string

Az alapértelmezett socketnév helyi adatbázishoz való csatlakozáskor, ha nincs más socketnév megadva.

mysql.default_host string

Az alapértelmezett adatbáziskiszolgáló, ha másképp nincs meghatározva. Nem alkalmazható safe mode-ban.

mysql.default_user string

Az alapértelmezett felhasználónév, ha más módon nincs meghatározva. Nem alkalmazható safe mode-ban.

mysql.default_password string

Az alapértelmezett jelszó, ha más módon nincs meghatározva. Nem alkalmazható safe mode-ban.

mysql.connect_timeout integer

Kapcsolat elévülési ideje másodpercben. Linux alatt ennyi idõt vár a PHP a szerver elsõ válaszára.

Erőforrás típusok

Kétféle erőforrástípus van a MySQL modulban. Az első egy adatbáziskapcsolatot azonosít, a második pedig egy kérésre adott választ.

Előre definiált állandók

Az itt listázott állandókat ez a kiterjesztés definiálja, és csak akkor elérhetőek, ha az adott kiterjesztés be van fordítva a PHP-be, vagy dinamikusan betöltött.

A PHP 4.3.0-es változata óta lehetőség van a mysql_connect() és a mysql_pconnect() függvények számára kliens jelzőket átadni. A következő konstansok léteznek:

Táblázat 2. MySQL kliens állandók

ÁllandóLeírás
MYSQL_CLIENT_COMPRESSTömörített protokoll használata
MYSQL_CLIENT_IGNORE_SPACEFüggvénynevek után szóközök engedélyezése
MYSQL_CLIENT_INTERACTIVEInteractive_timeout másodpercnyi (wait_timeout helyett) tétlenség engedélyezése a kapcsolat bezárása előtt.
MYSQL_CLIENT_SSLSSL titkosítás használata. Ez a jelző a MySQL kliens könyvtár 4.x verziójától létezik. A 3.23.x verzió benne van mind a PHP 4, mind a PHP 5 Windows-os változatában.

A mysql_fetch_array() függvénynél az eredménytömb fajtáját konstans segítségével adhatod meg. Az alábbi állandókat használhatod:

Táblázat 3. MySQL fetch állandók

ÁllandóLeírás
MYSQL_ASSOC A tömb kulcsai az eredményben szereplő mezőnevek.
MYSQL_BOTH Az eredményt mezőnevek valamint az eredmény oszlopszáma alapján érheted el.
MYSQL_NUM Az eredmény oszlopai egy számmal indexelt tömb formájában állnak rendelkezésre. Az első oszlop indexe 0.

Példák

Az alábbi példa bemutatja, hogyan kell csatlakozni, kéréseket végrehajtani, eredményt kinyomtatni és lecsatlakozni a MySQL szerverről.

Példa 1. MySQL modul áttekintő példa

<?php
// Csatlakozás, adatbázis kiválasztása
$kapcsolat = mysql_connect('mysql_hoszt', 'mysql_azonosito', 'mysql_jelszo')
    or die(
'Nem tudok csatlakozni: ' . mysql_error());
echo
'A kapcsolódás sikerült';
mysql_select_db('az_en_adatbazisom') or die('Nem sikerült kiválasztanom az adatbázist');

// SQL kérés végrehajtása
$keres = 'SELECT * FROM az_en_tablam';
$eredmeny = mysql_query($keres) or die('Hiba a kérésben: ' . mysql_error());

// Az eredmény kiírása HTML-ben
echo "<table>\n";
while (
$line = mysql_fetch_array($eredmeny, MYSQL_ASSOC)) {
    echo
"\t<tr>\n";
    foreach (
$sor as $egy_oszlop) {
        echo
"\t\t<td>$egy_oszlop</td>\n";
    }
    echo
"\t</tr>\n";
}
echo
"</table>\n";

// Eredményhalmaz felszabadítása
mysql_free_result($result);

// Kapcsolat lezárása
mysql_close($kapcsolat);
?>

Tartalom
mysql_affected_rows -- Az előző MySQL műveletben érintett sorok számát adja meg
mysql_change_user --  Aktív kapcsolat felhasználójának módosítása
mysql_client_encoding -- A karaktertábla nevét adja
mysql_close -- Lezár egy MySQL kapcsolatot
mysql_connect -- Kapcsolatot nyit meg egy MySQL szerverhez
mysql_create_db -- Létrehoz egy MySQL adatbázist
mysql_data_seek -- Belső eredménymutató mozgatása
mysql_db_name -- Get result data
mysql_db_query -- MySQL kérést küld az adatbázisnak
mysql_drop_db -- Töröl egy MySQL adatbázist
mysql_errno --  Az előző MySQL művelet hibakódját tartalmazza
mysql_error --  Az előző MySQL művelet hibaszövegét adja
mysql_escape_string --  Egy karakerláncban szereplő speciális karakterek értelmezését szünteti meg
mysql_fetch_array --  Kérés egy sorát adja vissza (tetszőleges) tömb formájában
mysql_fetch_assoc --  Az eredmény egy sorát asszociatív tömbként adja vissza.
mysql_fetch_field --  Eredményhalmaz egy oszlopáról ad információt objektum formájában
mysql_fetch_lengths --  Az eredmény oszlopainak hosszáról nyújt információt
mysql_fetch_object --  Az eredmény következő sorát objektum formájában adja vissza
mysql_fetch_row -- Az eredmény következő sorát adja vissza számmal indexelt tömb formájában
mysql_field_flags --  Adott eredmény adott mezejének flagjeit adja vissza.
mysql_field_len --  A kérdezett mező hosszát adja vissza
mysql_field_name --  Adott mező nevét adja vissza
mysql_field_seek --  Az eredménymutatót a kívánt pozícióba mozgatja
mysql_field_table --  Visszaadja annak a táblának a nevét, melyben a megadott mező található
mysql_field_type --  Az eredmény adott mezejének típusát adja vissza
mysql_free_result -- Felszabadítja az eredmény által lefoglalt memóriát
mysql_get_client_info -- MySQL kliens információ
mysql_get_host_info -- MySQL kiszolgáló információ
mysql_get_proto_info -- MySQL protokoll információ
mysql_get_server_info -- MySQL szerver információ
mysql_info --  Információkat ad a legutóbb végrehajtott lekérdezésrõl
mysql_insert_id --  Visszaadja az előző INSERT művelet által előállított azonosítót
mysql_list_dbs --  Kilistázza a MySQL szerveren elérhető adatbázisokat
mysql_list_fields -- Kilistázza a MySQL tábla mezőit
mysql_list_processes -- Kilistázza a MySQL processzeket
mysql_list_tables -- Adott adatbázisbeli táblaneveket listázza
mysql_num_fields -- Az eredményben szereplő mezők számát adja
mysql_num_rows -- Az eredményben szereplő sorok számát adja vissza.
mysql_pconnect --  Perzisztens kapcsolatot nyit meg a MySQL szerverhez
mysql_ping -- Leellenõriz egy szerver-kapcsolatot és újra kapcsolódik ha nincs kapcsolat
mysql_query -- MySQL kérést küld a szervernek
mysql_real_escape_string --  Feloldja egy stringben a speciális karaktereket egy SQL lekérdezés számára
mysql_result -- Eredmény egy sorának lekérdezése
mysql_select_db -- Kiválaszt egy MySQL adatbázist
mysql_stat -- Visszaadja az aktuális rendszer-állapotot
mysql_tablename -- Egy tábla nevével tér vissza
mysql_thread_id -- Az aktuális szál azonosítóját adja vissza
mysql_unbuffered_query --  SQL kérést küld küld a MySQL-nek anélkül, hogy az eredményt előfeldolgozná.