LXVII. MySQL Functions

Úvod

Tieto funkcie umožňujú pristupovať k databázovým serverom MySQL. Bližši informácie o MySQL možno nájsť na http://www.mysql.com/.

Dokumentácia k MySQL sa nachádza na http://dev.mysql.com/doc/.

Požiadavky

Aby boli tieto funkcie k dispozícii, je potrebné skompilovať PHP s podporou MySQL.

Inštalácia

Použitím konfiguračnej možnosti --with-mysql[=DIR] povolíte prístup PHP k databázam MySQL. Ak použijete túto možnosť bez špecifikovania cesty k MySQL (parameter DIR) PHP použije vlastné interné klientské knižnice MySQL. Vo verziách PHP 4 je podpora MySQL vždy povolená. Ak nie je konfiguračná možnosť špecifikovaná, použijú sa knižnice dodávané s PHP. Užívatelia, ktorí používajú ďalšie aplikácie využívajúce MySQL (napr. prevádzkujú PHP 3 a PHP 4 ako konkurentné moduly servera Apache; alebo auth-mysql) by mali vždy uviesť cestu k MySQL: --with-mysql=/cesta/ku/mysql. Týmto nastavením bude PHP prinútené používať klientské knižnice nainštalované spolu s MySQL, čím sa predíde prípadným konfliktom.

Windows verzie PHP majú vstavanú podporu pre toto rozšírenie. Nemusíte načítať žiadne dodatočné rozšírenie, aby ste mohli tieto funkcie používať.

Varovanie

Pri načítavaní tejto nadstavby súčasne s nadstavbou recode môžu nastať pády, či problémy pri spúšťaní PHP. Bližšie informácie možno nájsť v sekcii o nadstavbe. recode.

Runtime Konfigurácia

Správanie tejto funkcie je ovplyvnené nastaveniami v php.ini.

Tabuľka 1. Konfiguračné možnosti MySQL

NázovImplicitneMeniteľnosť
mysql.allow_persistent"On"PHP_INI_SYSTEM
mysql.max_persistent"-1"PHP_INI_SYSTEM
mysql.max_links"-1"PHP_INI_SYSTEM
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
Podrobnosti a definície konštánt typu PHP_INI_* možno nájsť pri funkcii ini_set().

Uvádzame krátke vysvetlenie konfiguračných direktív

mysql.allow_persistent boolean

Určuje, či budú povolené perzistentné pripojenia k MySQL.

mysql.max_persistent integer

Maximálny počet perzistentných pripojení k MySQL pre jeden proces.

mysql.max_links integer

Maximálny počet pripojení k MySQL, vrátanie perzistentných pripojení.

mysql.default_port string

Implicitný port TCP, ktorý sa bude používať na pripojenie k databázovému serveru, ak nie je v pripojení špecifikovaný port. V prípade, že nie je definovaná žiadna implicitná hodnota, port sa zistí z premennej prostredia MYSQL_TCP_PORT, ďalej z položky mysql-tcp v súbore /etc/services a nakoniec z hodnoty konštanty MYSQL_PORT zadanej pri kompilácii, a to v uvedenom poradí. Na platforme Win32 sa bude zisťovať len hodnota konštanty MYSQL_PORT.

mysql.default_socket string

Implicitný názov socketu, ktorý sa použije na pripojenie k lokálnemu databázovému serveru, ak nie je pri pripájaní špecifikovaný socket.

mysql.default_host string

Implicitný názov hostiteľského servera, ku ktorého databáze sa bude pripájať, ak nie je pri pripájaní špecifikovaný iný hostiteľ. Táto nastavenie nie je použiteľné v režime safe mode.

mysql.default_user string

Implicitné meno užívateľa, ktoré sa bude používať, v pripojení k databázovému serveru, ak nie je pri pripájaní špecifikované iné meno. Toto nastavenie nie je použiteľné v režime safe mode.

mysql.default_password string

Implicitné heslo, ktoré sa bude používať na pripojenie k databázovému serveru, ak nie je pri pripájaní špecifikované iné heslo. Toto nastavenie nie je použiteľné v režime safe mode.

mysql.connect_timeout integer

Časový limit odpojenia pri neaktivite v sekundách. V systéme Linux je tento časový limit použitý aj pri čakaní na prvú odpoveď servera.

Typy zdrojov

V moduli MySQL sú využívané dva typy zdrojov (resources). Prvým je identifikátor pripojenia k databáze a druhým je zdroj, ktorý uchováva výsledok dopytu.

Preddefinované Konštanty

Konštanty uvedené nižšie sú definované týmto rozšírením a budú dostupné iba keď rozšírenie bolo buď kompilované do PHP alebo dynamicky načítané za behu (runtime).

Od verzie PHP 4.3.0 je možné špecifikovať dodatočné príznaky pre klienta pri používaní funkcií mysql_connect() a mysql_pconnect() Definované sú nasledovné konštanty:

Tabuľka 2. Konštanty klienta MySQL

konštantapopis
MYSQL_CLIENT_COMPRESSpoužívať komprimačný protokol
MYSQL_CLIENT_IGNORE_SPACEpovoľovať medzeru za názvami funkcií
MYSQL_CLIENT_INTERACTIVEPoužívať nastavenie interactive_timeout (namiesto wait_timeout) ako interval nečinnosti v sekundách. Po uplynutí tohto intervalu bude spojenie uzatvorené.

Funkcia mysql_fetch_array() využíva konštanty na špecifikovanie typu polí pre výsledky. Definované sú nasledovné konštanty.

Tabuľka 3. Konštanty MySQL fetch

konštantapopis
MYSQL_ASSOC Stĺpčeky sú vrátené v poli, pričom indexy tohto poľa tvoria názvy atribútov tabuľky.
MYSQL_BOTH Stĺpčeky sú vrátené v poli, pričom indexy tohto poľa tvoria jednak číselné indexy polí tabuliek a jednak názvy atribútov tabuľky.
MYSQL_NUM Stĺpčeky sú vrátené v poli, pričom indexy tohto poľa tvoria číselné indexy polí tabuliek. Tento index začína od 0 - tá reprezentuje hodnotu prvého atribútu tabuľky vo výsledku.

Príklady

Nasledovný jednoduchý príklad ukazuje, ako sa pripojiť k databáze, vykonať dopyt, vytlačiť jednotlivé riadky tvoriace výsledok tohto dopytu a ako sa odpojiť od databázy MySQL.

Príklad 1. Všeobecný príklad použitia nadstavby MySQL

<?php
    
/* Pripojíme sa a vyberieme databázu */
    
$link = mysql_connect("mysql_hostiteľ", "mysql_užívateľ", "mysql_heslo")
        or die(
"Nemožno sa pripojiť");
    print
"Pripojenie prebehlo úspešne";
    
mysql_select_db("my_database") or die("Nemožno vybrať databázu");

    
/* Vykonáme dopyt SQL */
    
$query = "SELECT * FROM my_table";
    
$result = mysql_query($query) or die("Dopyt zlyhal");

    
/* Výpis výsledkov do HTML */
    
print "<table>\n";
    while (
$line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print
"\t<tr>\n";
        foreach (
$line as $col_value) {
            print
"\t\t<td>$col_value</td>\n";
        }
        print
"\t</tr>\n";
    }
    print
"</table>\n";

    
/* Uvoľníme premennú obsahujúcu výsledky */
    
mysql_free_result($result);

    
/* Ukončíme pripojenie */
    
mysql_close($link);
?>

Obsah
mysql_affected_rows -- Zistí počet riadkov, ktoré boli ovplyvnené predchádzajúcou operáciou.
mysql_change_user --  Change logged in user of the active connection
mysql_client_encoding -- Vráti názov použitej znakovej sady
mysql_close -- Ukončí pripojenie k serveru MySQL
mysql_connect -- Ustanoví pripojenie k serveru MySQL
mysql_create_db -- Create a MySQL database
mysql_data_seek -- Move internal result pointer
mysql_db_name -- Get result data
mysql_db_query -- Send a MySQL query
mysql_drop_db -- Drop (delete) a MySQL database
mysql_errno --  Returns the numerical value of the error message from previous MySQL operation
mysql_error --  Returns the text of the error message from previous MySQL operation
mysql_escape_string --  Escapes a string for use in a mysql_query.
mysql_fetch_array --  Fetch a result row as an associative array, a numeric array, or both.
mysql_fetch_assoc --  Fetch a result row as an associative array
mysql_fetch_field --  Get column information from a result and return as an object
mysql_fetch_lengths --  Get the length of each output in a result
mysql_fetch_object -- Fetch a result row as an object
mysql_fetch_row -- Get a result row as an enumerated array
mysql_field_flags --  Get the flags associated with the specified field in a result
mysql_field_len --  Returns the length of the specified field
mysql_field_name --  Get the name of the specified field in a result
mysql_field_seek --  Set result pointer to a specified field offset
mysql_field_table --  Get name of the table the specified field is in
mysql_field_type --  Get the type of the specified field in a result
mysql_free_result -- Free result memory
mysql_get_client_info -- Get MySQL client info
mysql_get_host_info -- Get MySQL host info
mysql_get_proto_info -- Get MySQL protocol info
mysql_get_server_info -- Get MySQL server info
mysql_info --  Get information about the most recent query
mysql_insert_id --  Get the ID generated from the previous INSERT operation
mysql_list_dbs --  List databases available on a MySQL server
mysql_list_fields -- List MySQL table fields
mysql_list_processes -- List MySQL processes
mysql_list_tables -- List tables in a MySQL database
mysql_num_fields -- Get number of fields in result
mysql_num_rows -- Get number of rows in result
mysql_pconnect --  Open a persistent connection to a MySQL server
mysql_ping -- Ping a server connection or reconnect if there is no connection
mysql_query -- Send a MySQL query
mysql_real_escape_string --  Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection.
mysql_result -- Get result data
mysql_select_db -- Select a MySQL database
mysql_stat -- Get current system status
mysql_tablename -- Get table name of field
mysql_thread_id -- Return the current thread ID
mysql_unbuffered_query --  Send an SQL query to MySQL, without fetching and buffering the result rows