Ïîäêëþ÷åíèå
Àâòîð: | Àðòåìüåâ Ñåðãåé Èãîðåâè÷ |
ICQ: | 438856621 |
email: | _spin_@bk.ru |
Ïåðâîå äåéñòâèå, êîòîðîå íàäî ñäåëàòü ïðè ðàáîòå ñ áàçîé äàííûõ - âûïîëíèòü ïîäêëþ÷åíèå. Äëÿ ýòîãî âàì ïîòðåáóåòñÿ çíàòü èìÿ ñåðâåðà, íàçâàíèå áàçû äàííûõ, èìÿ ïîëüçîâàòåëÿ è ïàðîëü.  íåêîòîðûõ ñëó÷àÿõ òðåáóåòñÿ åù¸ çíàòü ïîðò ñåðâåðà, ê êîòîðîìó ïîäêëþ÷åí MySQL.
Ïîäêëþ÷åíèå âûïîëíÿåòñÿ ïðè ïîìîùè ôóêöèé mysql_connect() èëè mysql_pconnect():
<?php $server = 'localhost'; $user = 'root'; $password = 'P@ssw0rd'; $dblink = mysql_connect($server, $user, $password); if($dblink) echo 'Îøèáêà ïîäêëþ÷åíèÿ ê ñåðâåðó áàç äàííûõ'; else die('Îøèáêà ïîäêëþ÷åíèÿ ê ñåðâåðó áàç äàííûõ'); // Òåïåðü â ïåðåìåííîé $dblink ñîäåðæèòñÿ // ññûëêà íà âðåìåííîå ïîäêëþ÷åíèå ê áàçå äàííûõ ?>
Åñëè íåîáõîäèìî óêàçàòü ïîðò ïîäêëþ÷åíèÿ, òî åãî íàäî ïðîñòî äîïèñàòü ÷åðåç äâîåòî÷èå ê èìåíè ñåðâåðà:
<?php ... $port = '12345'; $server = 'localhost:' . $port; $dblink = mysql_connect($server, $user, $pass); ... ?>
Ñèíòàêñèñ ôóíêöèè mysql_pconnect() ïîëíîñòüþ àíàëîãè÷åí ñèíòàêñèñó mysql_connect():
<?php $dblink = mysql_pconnect($server, $user, $pass); // Òåïåðü â ïåðåìåííîé $dblink ñîäåðæèòñÿ // ññûëêà íà ïîñòîÿííîå ïîäêëþ÷åíèå ê áàçå äàííûõ ?>
Ôóíêöèÿ mysql_connect() îòêðûâàåò âðåìåííîå ñîåäèíåíèå, êîòîðîå çàêðûâàåòñÿ ëèáî ïðè âûçîâå ôóíêöèè mysql_close(), ëèáî àâòîìàòè÷åñêè ïðè çàâåðøåíèè ñêðèïòà.  ñâîþ î÷åðåäü, ôóíêöèÿ mysql_pconnect() ñîçäà¸ò ïîñòÿííîå ïîäêëþ÷åíèå, êîòîðîå îñòà¸òñÿ îòêðûòûì äàæå ïîñëå çàâåðøåíèÿ ñêðèïòà (áóêâà "p" â èìåíè îçíà÷àåò "Persistent", ò.å. "ïîñòîÿííûé"). Ïðè ïîâòîðíîì âûçîâå mysql_pconnect() èíòåðïðåòàòîð ñíà÷àëà ïûòàåòñÿ íàéòè è èñïîëüçîâàòü îòêðûòîå ðàíåå ïîäêëþ÷åíèå, è òîëüêî â ñëó÷àå íåóäà÷è îòêðûâàåò íîâîå.
Ñëåäóþùèé øàã - âûáîð áàçû äàííûõ ïðè ïîìîùè ôóíêöèè mysql_select_db(). Ýòà ôóíêöèÿ óêàçûâàåò ÑÓÁÄ, ÷òî âñå ïîñëåäóþùèå çàïðîñû íàäî âûïîëíÿòü ñ òàáëèöàìè óêàçàííîé áàçû äàííûõ:
<?php $database = 'myDatabase'; $selected = mysql_select_db($database, $dblink); if($selected) echo 'Ïîäêëþ÷åíèå ê áàçå äàííûõ ïðîøëî óñïåøíî'; else die('Áàçà äàííûõ íå íàéäåíà èëè îòñóòñòâóåò äîñòóï'); ?>
Çäåñü ìû èñïîëüçîâàëè ôóíêöèþ die() ñ åäèíñòâåííûì ïàðàìåòðîì - ñîîáùåíèåì îá îøèáêå. Âûçîâ die() ìîìåíòàëüíî ïðåðûâàåò âûïîëíåíèå ñêðèïòà è âûâîäèò óêàçàííîå ñîîáùåíèå â áðàóçåð ïîëüçîâàòåëÿ. Èñïîëüçîâàòü die() æåëàòåëüíî òîëüêî â àâàðèéíûõ ñëó÷àÿõ, êîãäà äàëüíåéøåå âûïîëíåíèå ñêðèïòà íå èìååò ñìûñëà. Íàïðèìåð, åñëè ïðè çàãðóçêå ôîðóìà îêàçûâàåòñÿ, ÷òî áàçà äàííûõ ñîîáùåíèé íåäîñòóïíà - äàëüíåéøàÿ çàãðóçêà òåðÿåò âñÿêèé ñìûñë.
Íà÷àëüíîå ïîäêëþ÷åíèå âûïîëíåíî, òåïåðü íàäî íàñòðîèòü ïàðàìåòðû ñîåäèíåíèÿ. Îñíîâíîé ïàðàìåòð, êîòîðûé æåëàòåëüíî óñòàíîâèòü ïðèíóäèòåëüíî - êîäîâàÿ ñòðàíèöà (charset). Êîäîâàÿ ñòðàíèöà - ýòî ïðàâèëî ñîïîñòàâëåíèÿ ñèìâîëîâ ðàçëè÷íûõ ÿçûêîâ. MySQL ïðè ðàáîòå ñ ñèìâîëàìè îïèðàåòñÿ íà ÷èñëîâûå êîäû ñèìâîëîâ, ò.å. ëþáàÿ ñòðîêà äëÿ ñåðâåðà - ýòî ïðîñòî ïîñëåäîâàòåëüíîñòü ÷èñåë. È èìåííî êîäîâàÿ ñòðàíèöà îïðåäåëÿåò, êàêîìó ñèìâîëó ñîîòâåòñòâóåò òî èëè èíîå ÷èñëî. Íàïðèìåð, ñèìâîë ñ êîäîì 196 - ýòî áóêâà "Ä" â ðóññêîé êîäèðîâêå, "Äåëüòà" â ãðå÷åñêîé è "Ä" â çàïàäíîåâðîïåéñêîé êîäèðîâêå.
Ïî-óìîë÷àíèþ, MySQL èñïîëüçóåò êîäèðîâêè "latin1" (çàïàäíîåâðîïåéñêàÿ) , ïîýòîìó ïðè ïîïûòêå çàïèñàòü íà ñåðâåð èëè ñ÷èòàòü ñ íåãî äàííûå â íàöèîíàëüíîé êîäèðîâêå (íàïðèìåð, ðóññêèé òåêñò) - ïðîèçîéä¸ò êîíôëèêò ñîïîñòàâëåíèé è âñå êîíôëèêòóþùèå ñèìâîëû áóäóò çàìåíåíû íà çíàêè âîïðîñà "?".
Óñòàíîâêà êîäîâîé ñòðàíèöû ïðîèçâîäèòñÿ ïðè ïîìîùè ôóíêöèè mysql_set_charset() èëè ïóò¸ì âûïîëíåíèÿ ñïåöèàëèçèðîâàííûõ çàïðîñîâ SET:
<?php if (!function_exists('mysql_set_charset')) { function mysql_set_charset($charset, $dblink) { return mysql_query("set names $charset",$dlink); } } $mycharset = "cp1251"; mysql_set_charset($charset, $dblink) ?>
 ýòîì ñêðèïòå ïðîâåðÿåòñÿ íàëè÷èå ôóíêöèè mysql_set_charset(), è åñëè îíà íå íàéäåíà - îïðåäåëÿåòñÿ ôóíêöèÿ, âûïîëíÿþùàÿ àíàëîãè÷íîå äåñòâèå ïîñðåäñòâîì SQL-çàïðîñà.
Ïîñëå âûïîëíåíèÿ ýòîãî ñêðèïòà è ñåðâåð áàç äàííûõ è èíòåðïðåòàòîð PHP áóäóò ðàññìàòðèâàòü âñå ïåðåäàâàåìûå ñòðîêîâûå äàííûå êàê ñèìâîëû â êîäèðîâêå cp1251 (Windows-êèðèëè÷åñêàÿ) è êîíôëèêòîâ ñîïîñòàâëåíèÿ íå âîçíèêíåò. Åñëè æå íåîáõîäèìî îáåñïå÷èòü îäíîâðåìåííóþ ïîääåðæêó ñðàçó íåñêîëüêèõ ÿçûêîâ - âîñïîëüçóéòåñü êîäèðîâêîé utf8 (Þíèêîä).
Êàê ïðàâèëî, áàçû äàííûõ è èíòåðïðåòàòîð PHP ðàñïîëàãàþòñÿ íà ðàçíûõ ñåðâåðàõ è ñâÿçàíû ïî ñåòè. Ïîýòîìó íåëüçÿ ãàðàíòèðîâàòü, ÷òî ïîñòîÿííîå ñîåäèíåíèå, îòêðûòîå ïðè ïðåäûäóùåì çàïóñêå ñêðèïòà, áóäåò äîñòóïíî è ñåé÷àñ. Ñîåäèíåíèå ñ ñåðâåðîì ìîæåò áûòü óòåðÿíî ïî ðàçëè÷íûì ïðè÷èíàì: ñáîé ñåòè, îòêàç èëè ïåðåãðóçêà ñåðâåðà è ò.ï.
Äëÿ ïðîâåðêè ïîäêëþ÷åíèÿ ìîæíî âîñïîëüçîâàòüñÿ ôóíêöèåé mysql_ping(). Îíà âîçâðàùàåò true èëè false â çàâèñèìîñòè îò ñîñòîÿíèÿ ñîåäèíåíèÿ:
<?php if (!mysql_ping($dblink)) { echo 'Ñîåäèíåíèå ñ áàçîé äàííûõ ïîòåðÿíî'; // çäåñü ìîæíî ïîïðîáîâàòü // ïîâòîðíî ïîäêëþ÷èòüñÿ } ?>
Òàê æå ýòó ôóíêöèþ èìååò ñìûñë èñïîëüçîâàòü ïðè âûïîëíåíèè äëèòåëüíûõ îïåðàöèé, êîãäà ñîåäèíåíèå îòêðûâàåòñÿ è äëèòåëüíîå âðåìÿ îñòà¸òñÿ íåàêòèâíûì, ò.ê. ñåðâåð â öåëÿõ ýêîíîìèè ðåñóðñîâ ìîæåò ïðèíóäèòåëüíî îòêëþ÷èòü ïðîñòàèâàþùåå ïîäêëþ÷åíèå.
Èòàê, ìû ïîëó÷èëè äîñòóï ê áàçå äàííûõ è ãîòîâû ïîëó÷àòü è îáðàáàòûâàòü äàííûå.