HTML, Excel, Word, SEOPHP êóðñ äëÿ ÷àéíèêîâ ⇒ Çàïðîñû â PHP

PHP äëÿ "÷àéíèêîâ"

Èíñòðóìåíòû
Âûáèðàåì IDE
Âûáèðàåì Web-ñåðâåð
Âûáèðàåì ÑÓÁÄ
Ñòðóêòóðà ÿçûêà PHP
Ïåðâûé øàã
Ñèíòàêñèñ
Òèïû äàííûõ
Ïåðåìåííûå è êîíñòàíòû
Îïåðàòîðû
Âûðàæåíèÿ
Óïðàâëÿþùèå ñòðóêòóðû
Ôóíêöèè
Êëàññû
Èñêëþ÷åíèÿ
Îøèáêè
Ìàññèâû
Ãëîáàëüíûå ìàññèâû
Cookies
Ñåññèè
Çàãðóçêà ôàéëîâ
Ðàáîòà ñ ôàéëàìè
Ðàáîòà ñ ôàéëàìè íà äèñêå
Ðàáîòà ñ äàííûìè â ôàéëå
Ïðèìåð óïðàâëåíèÿ ôàéëàìè
Ðàáîòà ñ áàçàìè äàííûõ
Ïîäêëþ÷åíèå
Àíàëèç ðåçóëüòàòîâ
Âûïîëíåíèå çàïðîñîâ
Îòêëþ÷åíèå
Ïðèìåð: îòñëåæèâàíèå ïîëüçîâàòåëåé
Ðàáîòà â ñåòè
Îòïðàâêà ïî÷òû
Áåçîïàñíîñòü
HTTP-àóòåíòèôèêàöèÿ
Çàùèòà ëîãèíîì è ïàðîëåì
Àâòîìàòèçàöèÿ
Ðåãóëÿðíûå âûðàæåíèÿ â PHP
Èíòåãðàöèÿ
PHP è JavaScript

Çàêàçàòü ñåðâåð HPE Proliant Gen10 íà https://www.proliant-hp.ru/catalog/servery-hp-gen10.

Çàïðîñû â PHP


Àâòîð: Àðòåìüåâ Ñåðãåé Èãîðåâè÷
ICQ: 438856621
email: _spin_@bk.ru

 ïðåäûäóùåì óðîêå ìû ïîçíàêîìèëèñü ñ îñíîâàìè ÿçûêà SQL è òåïåðü ïîïðîáóåì ïðèìåíèòü ýòè çíàíèÿ íà ïðàêòèêå.


Âñå çàïðîñû â PHP â îñíîâíîì âûïîëíÿþòñÿ ñ ïîìîùüþ ôóíêöèè mysql_query(). Ôóíêöèÿ ïðèíèìàåò äâà ïàðàìåòðà: ñòðîêó çàïðîñà è èäåíòèôèêàòîð ïîäêëþ÷åíèÿ, ïîëó÷åííûé ïîñëå âûçîâà mysql_connect().  ïðèíöèïå, èäåíòèôèêàòîð ïîäêëþ÷åíèÿ ìîæíî íå óêàçûâàòü, òîãäà áóäåò èñïîëüçîâàòüñÿ ïîñëåäíåå ñäåëàíîå ïîäêëþ÷åíèå. Íî òàêîé ïîäõîä ÷ðåâàò îøèáêàìè â ñëîæíûõ ñêðèïòàõ ñ íåñêîëüêèìè îäíîâðåìåííûìè ïîäêëþ÷åíèÿìè ê ðàçëè÷íûì áàçàì.


 êà÷åñòâå ïåðâîãî ïðèìåðà âûáåðåì âñå ñòðîêè èç íàøåé òàáëèöû:

<?php
	$sql = 'SELECT id, user_ip, user_agent FROM user_tracker';
	
	$qry = mysql_query($sql, $dblink); 
	
	if(!$qry)
	{
		echo 'Îøèáêà âûïîëíåíèÿ çàïðîñà: ' . mysql_error();
		exit();	
	}
	// îáðàáàòûâàåì ðåçóëüòàòû çàïðîñà
	

?>

Ôóíêöèÿ mysql_query() ïîçâðàùàåò ññûëêó íà ðåçóëüòàòû âûïîëíåíèÿ çàïðîñà. Åñëè çàïðîñ çàâåðøèëñÿ ñ îøèáêîé - ôóíêöèÿ âåðí¸ò false, ïîñëå ÷åãî òåêñò îøèáêè ìîæíî áóäåò ïîëó÷èòü âûçîâîì ôóíêöèè mysql_error(), à íîìåð îøèáêè - ôóíêöèåé mysql_errno().

Äëÿ ïîëó÷åíèÿ îòäåëüíîé çàïèñè èç ðåçóëüòàòîâ çàïðîñà íåîáõîäèìî âîñïîëüçîâàòüñÿ îäíîé èç fetch-ôóíêöèé (ôóíêöèè ïîëó÷åíèÿ äàííûõ). Èõ íåñêîëüêî è êàæäàÿ óäîáíà â ñâî¸ì ñëó÷àå.

mysql_fetch_array($result, $type)

 

$result - ýòî ïåðåìåííàÿ, ïîëó÷åííàÿ ïîñëå âûçîâà mysql_query()

Ïàðàìåòð $type îïèñûâàåò ôîðìàò âîçâðàùàåìûõ äàííûõ. Ìîæåò ïðèíèìàòü îäíî èç òð¸õ çíà÷åíèé:

MYSQL_NUM. Ôóíêöèÿ âîçâðàùàåò íóìåðîâàííûé ìàññèâ, ãäå íóëåâîé ýëåìåíò - çíà÷åíèå íóëåâîãî ïîëÿ, ïåðâûé ýëåìåíò - çíà÷åíèå ïåðâîãî ïîëÿ è ò.ä. (ïîëÿ ñ÷èòàþòñÿ "ñëåâà íàïðàâî" â òîì ïîðÿäêå, â êîòîðîì áûëè îáúÿâëåíû â çàïðîñå):

<?php
	...
	$row = mysql_fetch_array($qry, MYSQL_NUM);
	echo "IP-àäðåñ ïîëüçîâàòåëÿ: " . $row[1];
	echo "Èñïîëüçóåìûé áðàóçåð: " . $row[2];
	...
?>      

MYSQL_ASSOC. Ôóíêöèÿ âîçâðàùàåò àññîöèàòèâíûé ìàññèâ, â êîòîðîì ýëåìåíò ñ èìåíåì ïîëÿ ñîäåðæèò çíà÷åíèå ýòîãî ïîëÿ.

<?php
	...
	$row = mysql_fetch_array($qry, MYSQL_NUM);
	echo "IP-àäðåñ ïîëüçîâàòåëÿ: " . $row['user_ip'];
	echo "Èñïîëüçóåìûé áðàóçåð: " . $row['user_name'];
	...
?>      

MYSQL_BOTH. Âîçâðàùàåòñÿ ìàññèâ, â êîòîðîì ìîæíî îäíîâðåìåííî îáðàùàòüñÿ ê äàííûì è ïî íîìåðó è ïî èìåíè.

<?php
	...
	$row = mysql_fetch_array($qry, MYSQL_NUM);
	echo "IP-àäðåñ ïîëüçîâàòåëÿ: " . $row[1];
	echo "Èñïîëüçóåìûé áðàóçåð: " . $row['user_agent'];
	...
?>      

 

mysql_fetch_assoc ( $result )

 

Ôóíêöèÿ ïîëüíîñòüþ àíàëîãè÷íà ôóíêöèè mysql_fetch_array() ñ óêàçàíèåì òèïà MYSQL_ASSOC.

mysql_fetch_row ( $result )

 

Ôóíêöèÿ ïîëüíîñòüþ àíàëîãè÷íà ôóíêöèè mysql_fetch_array() ñ óêàçàíèåì òèïà MYSQL_NUM.

mysql_fetch_object ( $ result )

 

Ôóíêöèÿ âîçâðàùàåò îáúåêò, ñîäåðæàùèé ñâîéñòâà, îäíîèì¸ííûå ïîëÿì ðåçóëüòàòîâ çàïðîñà. Çíà÷åíèÿ ýòèõ ñâîéñòâ âñåãäà òåêñòîâîãî òèïà è ðàâíû çíà÷åíèþ ñîîòâåòñòâóþùåãî ïîëÿ.

<?php
	...
	$row = mysql_fetch_object($qry);
	echo "IP-àäðåñ ïîëüçîâàòåëÿ: " . $row->user_ip;
	echo "Èñïîëüçóåìûé áðàóçåð: " . $row->user_agent;
	...
?>      

 

   
   
   

Âñå fetch-ôóíêöèè ðàáîòàþò ïî îäíîìó àëãîðèòìó. Ïðè ïåðâîì âûçîâå ôóíêöèÿ ïðîâåðÿåò íàëè÷èå ñòðîê è åñëè ðåçóëüòàò çàïðîñà íå ïóñòîé - âîçâðàùàåò ïåðâóþ ñòðîêó è ïåðåâîäèò óêàçàòåëü òåêùåé ñòðîêè íà ñëåäóþùóþ çàïèñü. Ïðè êàæäîì ïîñëåäóþùåì âûçîâå ôóíêöèÿ âîçâðàùàåò ïîëüçîâàòåëþ òåêóùóþ ñòðîêó è ïåðåõîäèò ê ñëåäóþùåé. Åñëè äîñòèãíóòà ïîñëåäíÿÿ ñòðîêà è ïåðåäàâàòü áîëüøå íå÷åãî - ôóíêöèÿ âîçâðàùàåò false.

Òàêèì îáðàçîì, öèêë ïåðåáîðà âñåõ çàïèñåé áóäåò âûãÿäåòü òàê:

<?php
	...
	// ïîëó÷àåì ïåðâóþ ñòðîêó
	$row = mysql_fetch_object($qry);
	while ($row)
	{
		// îáðàáàòûâàåì ïîëó÷åííûå äàííûå
		echo "IP-àäðåñ ïîëüçîâàòåëÿ: " . $row->user_ip;
		echo "Èñïîëüçóåìûé áðàóçåð: " . $row->user_agent;

		// ïîëó÷àåì ñëåäóþùóþ ñòðîêó
		$row = mysql_fetch_object($qry);
	}
	...
?>      

Èíîãäà âîçíèêàåò íåîáõîäèìîñòü ïåðåäâèãàòüñÿ ïî çàïèñÿì íå òîëüêî "âïåð¸ä", íî è "íàçàä", ò.å. ïî íàïðàâëåíèþ îò òåêóùåé ñòðîêè ê ïåðâîé.  ýòîì ñëó÷àå íàäî èñïîëüçîâàòü ôóíêöèþ mysql_data_seek(), êîòîðàÿ ïîçâîëÿåò ïåðåéòè ê çàïèñè ñ çàäàííûì íîìåðîì.

<?php
	...
	// $x - òðåáóåìûé íîìåð ñòðîêè
	$x = 100;
	if(mysql_data_seek($qry, $x))
		echo 'óñïåøíî ïåðåøëè ê ñòðîêå ¹' . $x;
	else 
		echo 'ïåðåéòè ê ñòðîêå ¹' . $x . ' íå óäàëîñü';
	...
?>      

Çíà÷åíèå íîìåðà ñòðîêè äîëæíî áûòü â äèàïàçîíå îò 0 äî êîëè÷åñòâà ñòðîê â ðåçóëüòàòàõ çàïðîñà. Êîëè÷åñòâî ñòðîê ìîæíî óçíàòü ïðè ïîìîùè ôóíêöèè mysql_num_rows (). Ñ ó÷¸òîì ýòîãî, ìîæíî ïåðåïèñàòü ïðåäûäóùèé ïðèìåð â áîëåå áåçîïàñíîé ôîðìå:

<?php
	...
	// $x - òðåáóåìûé íîìåð ñòðîêè
	$x = 100;
	if($x < mysql_num_rows($qry))
		mysql_data_seek($qry, $x);
	else echo "ïåðåéòè ê ñòðîêå ¹" . $x . " íå óäàëîñü." .
		"Ñòðîêà ñ òàêèì íîìåðîì íå ñóùåñòâóåò.";
	...
?>      

Îäíàêî mysql_num_rows() ïðèìåíèìà òîëüêî ê ðåçóëüòàòàì âûïîëíåíèÿ SELECT. Ïðè âûïîëíåíèè âñåõ îñòàëüíûõ êîìàíä (INSERT, UPDATE è DELETE) ôóíêöèÿ âîçâðàùàåò 0 (âåäü ñåðâåð íå âîçâðàùàë íè îäíîé ñòðîêè). ×òîáû îïðåäåëèòü, ñêîëüêî ñòðîê áûëî âñòàâëåíî, èçìåíåíè èëè óäàëåíî ïðè âûïîëíåíèè ïîñëåäíåãî çàïðîñà íåîáõîäèìî âîñïîëüçîâàòüñÿ ôóíêöèåé mysql_affected_rows().

Íàïðèìåð, ñëåäóþùèé êîä ïîìîãàåò óçíàòü ðåçóëüòàòû î÷èñòêè òàáëèöû:

<?php
	$sql = "DELETE FROM user_tracker";
	$qry = mysql_query($sql, $dblink);
	if($qry)
		echo 'Óäàëåíî ' . mysql_affected_rows() . ' ñòðîê.';
	else 'Îøèáêà óäàëåíèÿ: ' . mysql_error();
?>      

Åñëè âàì íåîáõîäèìî óçíàòü çíà÷åíèå àâòîèíêðåìåíòíîãî ïîëÿ äëÿ òîëüêî ÷òî âñòàâëåííîé çàïèñè - âîñïîëüçóéòåñü ôóíêöèåé mysql_insert_id().

<?php
	$sql = "INSERT user_tracker (session_id, enter_dt, 'user_ip') ".
			"VALUES('ahduyfis', NOW(), '192.168.10.33')";
	$qry = mysql_query($sql, $dblink);
	if($qry)
	{
		echo 'Äîáàâëåíà çàïèñü ñ id = ' . mysql_insert_id($dblink);
	}
	else 'Îøèáêà äîáàâëåíèÿ: ' . mysql_error();
?>      

Êàê óæå ãîâîðèëîñü ðàíåå - âñå òåêñòîâûå çíà÷åíèÿ â çàïðîñàõ çàïèñûâàþòñÿ â îäèíàðíûõ êàâû÷êàõ. Íî î÷åíü ÷àñòî âîçíèêàåò ñèòóàöèÿ, êîãäà íåîáõîäèìî çàíåñòè ñòðîêó, â êîòîðîé óæå åñòü êàâû÷êè (íàïðèìåð, ïàðîëü âèäà "my'1super'2password"). Åñëè ïîïðîáîâàòü âíåñòè å¸ â èñõîäíîì âèäå, òî MySQL íå ñìîæåò îáðàáîòàòü çàïðîñ è âûäàñò ñîîòâåòñòâóþùóþ îøèáêó. ×òîáû ýòîãî èçáåæàòü íåîáõîäèìî ïðåäâàðèòåëüíî ïîäãîòîâèòü ñòðîêó ê çàíåñåíèþ. Äëÿ ýòîãî ïðèìåíÿåòñÿ ôóíêöèÿ mysql_real_escape_string(). Îíà ïðåîáðàçóåò âñå ñëóæåáíûå è íå÷èòàåìûå ñèìâîëû â ñîîòâåòñòâóþùèå èì ñïåöñèìâîëû, òàêèå êàê \x00, \n, \r è ò.ï.

Îáÿçàòåëüíàÿ ïðîâåðêà âñåõ äàííûõ ïåðåä çàíåñåíèåì â òàáëèöó íå òîëüêî ÿâëÿåòñÿ ïðèçíàêîì "õîðîøåãî òîíà" ñðåäè ïðîãðàììèñòîâ, íî è ÿâëÿåòñÿ íàñóùíîé íåîáõîäèìîñòüþ äëÿ çàùèòû ñàéòà îò âçëîìà è õèùåíèÿ äàííûõ.

<?php
	$session_id = mysql_real_escape_string('ahduyfis');
	$user_ip = mysql_real_escape_string('192.168.10.33');

	$sql = "INSERT user_tracker (session_id, enter_dt, 'user_ip') ".
			"VALUES($session_id, NOW(), $user_ip)";
    ...
?>      

Ïðè íàïèñàíèè ñëîæíûõ çàïðîñîâ ëó÷øå âñåãî ïðåäâàðèòåëüíî çàïðîñ èñïûòàòü ïðè ïîìîùè ñòîðîííèõ ïðîãðàìì, à òîëüêî ïîòîì äîáàâëÿòü åãî â êîä. Òàêîé ïîäõîä ñóùåñòâåííî îáëåã÷àåò òåñòèðîâàíèå êàê çàïðîñà, òàê è ñêðèïòà â öåëîì.

 



 íà÷àëî ñòðàíèöû



 íà÷àëî ñòðàíèöû