Обучение в PHP - част 10 (Използване на MySQL)
Свързване с базата данни

Основната идея на един WEB сайт базиран на база данни е, че информацията, която се визуализира в Web сайта, се съхранява на сървар за база данни. Тази информация след това се извлича динамично от сървара и се показва в Web страницата. Тези дибамични Web страници после могат да се раязглеждат със всеки браузър.

Потребителите въвеждат адреса на Web страницата във техните браузъри. Тази информация се изпраща към Web сървъра, която я представя на сървъра за база данни под формата на заявка. Сървъра за база данни връща резултата отново към Web сървъра, който форматира информацията в HTML формат и я визуализира в браузъра.

Предо обаче да можете да осъществите връзка между база данни на MySQL и Web страница, трябва да се научите как да се свързвате с MySQL. PHP представя вградени функции за извършване на тази връзка. Функцията се нарича mysql_connect().

Функцията mysql_connect() се използва за осъществяване на връзка с база данни на MySQL. Тази функция също така приема определени параметри, които определят кой може да се свърже с базата данни и коя е базата. Функцията връща резултат, който указва, дали връзката е била осъществена. Тази стойност се съхранява в променлива, позната под името идентификатор на връзката. Този идентификатор се използва вътрешно от PHP за проверка дали връзката е била осъществена. Ако се извършат множество връзки към една база данни чрез функцията mysql_connect(), само първото извикване на функцията осъществява физическа връзка.

Синтаксисът на функцията е следния:

$connect = mysql_connect(<адрес>, <идентификатор на потребител>, <парола>);


Функцията приема три параметъра. Те имат следното значение:

Адрес Параметърът адрес съдържа IP адреса или името на хоста, на който е инсталиран сървърът. Можете да зададете като адрес localhost, ако MySQl се намира на същия компютър, на който е Web сървъра.
Идентификатор на потребител Този параметър съдържа потребителското име на потребител, който има право на достъп до базата данни. Този идентидикатор трябва да съществува на сървара MySQL и трябва да има подходящите права.
Парола Този параметър задава паролата, съответстваща на идентификатора на портебителя. Паролата се използва за да осигури, че само оторизирани личности ще имат достъп до базата. КОгато този параметър не е зададен, се приема че паролата е празна.
#Connect Променливата $connect е идентификаторът на връзката. Тази променлива съдържа стойност True, ако връзката е осъществена


<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

echo "Идентификацията е Успешна";

?>


В горния код се осъществява връзка към сървара MySQL, като се използва идентификаторът root. Адресът е localhost, защото Web сървърът и MySQL се намират на един компютър. Потвърждение за това, че връзката е била осъществена успешно, се съхранява в променливата $connection.

Създаване на база данни в MySQL

Функцията mysql_create_db() се използва за създаване на база данни в MySQl.
Тя има следния синтаксис:

$createtable = mysql_create_db($dbname);

Променливата $dbname съдържа името на базата данни, която трябва да се създаде, а променливата $createtable съдържа резултатът от опита за създаване на база.

Следващият код създава база с името Mytestbd:

<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

$createdb = mysql_create_db("Mytestbd")
or die ("Не може да се създаде база данни");

echo "Базата данни е създадена успешно";

?>


В горноя код се осъществява връзка с MySQL чрез функцията mysql_connect(). След това се задава базата данни Mytestbd на сървара MySQL с помоща на функцията mysql_create_db(). Потвърждение за това дали базада е създадена успешно се съхранява в променливата $createdb.

Избиране на база данни

След като сте създали база данни с PHP, или ако базата вече съществува в MySQL, можете да добавите таблици и да внъкнете запис в базата данни. Преди да започнете работа с нея, трябва да я изберете или да осъществите достъп до нея. PHP предоставя функцията mysql_select_db() за избиране на база в MySQL
Функцията има следния синтаксис:

$connect = mysql_select_db($dbname);

В горния код името на базата данни се предава като аргумент на функцията. Функцията връща стойност в променливата $connect, потвърждаваща дали базата данни е създадена успещно. Ако стойността е True, то базата е била успешно избрана. Някой от случайте, в който е върната стойност False, са:
Базата данни не съществува на сървъра
Базата данни е заключена от друг разработчик. Ако множество потребители се опитват да осъществят достъп до една база данни и ако някой от тях вече заключи сотъпа до нея, тогава другите потребители ще получат съобщение за грешка.

<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

$result = mysql_select_db("Mytestbd")
or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

?>


Създаване на таблица в база данни

При базата данни, за разлика от текстовия файл, трябва да създадете първо таблица, в която да вмъквате запис. Не може да се записва в базата данни, ако няма нито една таблица. Чрез следния код ще създадете таблица Maildata ( Адресанти ). После ще вмъкнете запис в нея.

<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

$result = mysql_select_db("Myailinglist")
or die ("Не може да се изберете базата данни");

$sqlquery = "create table if not exist Maildata (
Name varchar (50) Not NULL,
Email varchar (50) Not NULL Primary key,
Secondaryemail varchar (50) Not NULL
");


$queryresult = mysql_query($sqlquery)
or die ("Заявката не може да се изпълни");

echo "Таблицата Maildata в базата данни Mailinglist е създадена успешно.";

?>


След свързването с MySQL, се осъществява достъп до базата данни Mailinlist, в горния код се създава таблица с име Maildata чрез функцията create table(). Таблицата има три полета: Name, Email, Secondaryemail. Типът на всички полета е varchar и ви позволява да съхраните до 50 символа във всяко поле. Нито едно от полетата не може да бъде празно, и първичният ключ в таблицата е полето Email. Това означава, че полетата ще съдържат уникални стойности. Поради тази причина двама човека, имащи едни и същи email адреси не могат да се включат в базата едновременно. Индикацията за това дали заявката е била успешна се съхранява в променливата $queryresult.

Вмъкване на запис в таблица

До сега видяхте как можете да се свържете с MySQL и да осъществите достъп до БД. Видяхте как можете да създадете БД и таблица в нея. Информацията, която ще се съхранява в БД, ще се въвежда чрез HTML страница.

В горния код се създава Web страница, която приема името, Email-а и латернативния Email на потребител. След като потребителя въведе необходимата информация, той трябва да натисне бутона "Изпрати". След като е натиснал бутона, цялата информация се изпраща към сървара MySQL. Както можете да видите, цялата информация от горния скрипт се изпраща чрез метода POST.
Сега информацията се изпраща към сървара MySQl, за да вмъкнете в таблицата Maildata под формата на запис. За да вмъкнете информацията трябва да:
Използвате функцията mysql_connect(), за да осъществите връзка с MySQL.
Използвате функцията mysql_select(), за да изберете БД Mailinglist.
Използвате функцията mysql_query(), за да пратите информацията към MySQL. Информацията се предава под формата на заявка insert, която се съхранява в променлива под формата на низ. Тази променлива се предава като параметър на функцията mysql_query(). Сега ще създадем същинския скрипт на PHP, който ще изпълнява задачата по вмъкване на информацията в таблицата. Запишете следния скрипт под името addrow.php

<html>
<body>

<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

$result = mysql_select_db("Mytestbd")
or die ("Не може да се изберете базата данни");

$sqlquery = "INSERT into Maildata VALUES ('$name', '$Email', $Secondaryemail')";

queryresult = mysql_query ($sqlquery)
or die ("Не може да се изпълни заявката");

echo "Информацията за потребителя е записана успешно";

?>

</body>
</html>


Горния код се осъществява връзка с MySQL. САлед това се осъществява достъп до БД. Тя съдържа таблица с име Maildata. Ще вмъкнем запис в таблицата.След това създаваме заявка и тя се съхранява в променливата $sqlquery. Низът съдържа името, Email и алтернативния Email на потребителя. В заявката insert, може да видите, че всяко парче от информацията се свързва, с определено поле в таблицата. Ако заявката се изпълни успешно, информацията се вмъква в таблицата.

Извличане на информация от таблица

След като сте установили връзка с базата данни и сте записали информация в нея, можете да извлечете тази информация от базата. За да получите информацията от базата, трябва да създадете заявка на езика SQL ( Structured Query Language ). Тези заявки извличат информация от базата и я връщат като записи.

PHP предоставя функцията mysql_query() за извличане на данни от сървара MySQL. Функцията приема като параметър заявка и я предава на сървъра MySQL. Сървърът след това обработва заявката и връща изисканата информация. Синтаксисът на функцията mysql_query() е :

$queryres = mysql_query($query_string);

В горния синтаксис функцията mysql_query() приема като параметър заявката $query_string и съхранява резултата в променливата $queryres. Променливата $query_string трябв да съдържа заявка на езика SQL. Променливата $queryres съдържа стойност Flase само в следните три случея:


[*]Потребителя няма право на достъп до търсената информация
[*]Грешка в синтаксиса на заявката
[*]Търсената информация не може да бъде намерена


За да извлечете информация от таблица на MySQL, трябва да направите следното:

[list=1]
[*]Трябва да се свържете с MySQL чрез функцията mysql_connect().
[*]След това трябва да изберете базата, в която се намира информацията, чрез функцията mysql_select_db().
[*]След това трябва да създадете заявка за извличане на нужната информация от таблицата. Низът се предава като параметър на функцията mysql_query(), която от своя страна я препраща към MySQL.
[*]Накрая заявката се изпълнява от MySQL и се връща стойност, която се съхранява в променлива. Ако стойността е True, значи заявката е била изпълнена успешно. Ако заявката не е изпълнена, трябва да се покаже съобщение за грешка

Следващият код съдържа заявка която извлича всички записи от таблицата Maildata (Ако се чудите защо от тази таблица, върнете се на предишния урок и вижте защо! ).

<html>
<body>

<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

$selectdb = mysql_select_db("Myailinglist")
or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

$sqlquery = "SELECT * from MAildata";

$queryresult = mysql_query($sqlquery)
or die ("Заявката не се изпълни");

echo "Всички записи от таблицата са извлечени успешно";

?>

</body>
</html>



Кодът се свързва с MySQL, чрез функцията mysq_connect() и избира базата Mailiglist чрез функцията mysql_select_db(). След като връзката е осъществена се задава SQL заявка и се съхранява в променливата $sqlquery. Този низ се предава на сървара чрез функцията mysql_query(). Ако заявката е извършена успешно, променливата $queryresult има стойност True.


PHP предоставя няколко функции за извличане на информацията при успешна заявка. Тези функции обработват всеки ред от информацията. Поради тази причина трябва да извикате функцията толкова пъти, колкото реда има в резултата. Например, ако заявката върне 20 реда от данни, ще трябва да извикате функцията 20 пъти. Можете да използвате функцията mysql_affected_rows(), за да разберете колко реда са върнати и да съхраните това число в променлива. След това можете да използвате променливата, за да следите броя на върнатите редове и броя на обработените редове. След това можете да използвате цикъла while, който да се изпълнява, докато всеки запис се обработи и покаже в Web страницата. Следващите две функции се използват за извличане на информацията от резултата.


[*]Функцията mysql_fetch_row() Тази функция връща резултата като номериран масив. Когато използвате номериран масив, информацията се извлича от мрезултата под формата на индексиран масив. Масивът съхранява първото поле от резултата на пъров място, второто поле на второ място и т.н
[*]Функцията mysql_fetch_array() Тази функция съдържа резултата като асоцииран масив. В този случай полетата се индексират на базата на имената си. Ако възникне грешка или не е извлечена стойност, функцията връща стойност NULL.


Сега да разгледаме тези две функции по отделно :

Функцията mysql_fetch_row()

Функцията mysql_fetch_row() обработва резултата запис по запис. Информацията се съхранява в номериран масив и всяко поле в записа се съхранява като елемент на масив. Синтаксисът на функцията mysql_fetch_row() е следния:

$resrow = mysql_fetch_row( $result );

Както обясних по-рано, променливата $resrow показва дали функцията е извлечена успешно, Променливата $resrow съдържа стойностите в реда, в който е била получена информацията. Така стойността на първото поле е достъпна като първи елемент на масива. Броя на елементите в масива е равен на броя на колконите в резултатите. Когато използвате функцията mysql_fetch_row() за да извличате резултати трябва да направите следното:
[list=1]
[*]Да се свържете с базата данни.
[*]Да изберете базата данни Mailinglist.
[*]Да създадете SQL заявка за извличане на информацията от базата.
[*]Когато заявката се изпълни, всички записи от таблицата Maildata са извлечени.
[*]Да създадете променлива ( примерно $resrow ) и да съхраните броя на записите, върнати от функцията mysql_fetch_row().
[*]Да използвате цикъла while, който да се изпълнява, докато свърши редовете в резултата.
[*]Променливата $resrow е едномерен масив в който ще се изпълняват редовете от таблицата Maildata.
[*]В тялото на цилъла while за да извлечете ред по ред информацията от таблицата Maildata и да визуализирате информацията в Web страницата.

Функцията mysql_fetch_array()

Когато използвате функцията mysql_fetch_array() записите се извличат под формата на асоциативен масив. В случая на асоциативен масив, всеки елемент на масива съдържа поле от ред в резултата. Всеки елемент има име на съответстващото поле в резултата. Синтаксисът на функцията mysql_fetch_array() е :

$resrow = mysql_fetch_array($result);

В горния синтаксис,


[*]Променливата $result позната под името идентификатор на резултата, съдържа резултата, върнат от функцията mysql_query().
[*]Променливата $resrow е асоциативен масив, съдържащ ред от резултата, върнат от функцията mysql_fetch_array().
[*]Първият елемент на масива $resrow съдържа стойност на първото поле на резултата. Етикетът на елемента съвпада с името на първото поле в таблицата. Другите елементи на масива са съответни на другите полета в таблицата.


Предимството на използването на функцията mysql_fetch_array() пред функцията mysql_fetch_row() e, че не ви се налага да помните реда в полетата на таблицата.

Когато се използва функцията mysql_fetch_array() за извличане на информацията, трябва да извършите следното:

[list=1]
[*]Да се свържете с базата данни.
[*]Да изберете базата данни Mailinglist.
[*]Да създадете SQL заявка за извличане на информацията от базата.
[*]Заявката се записва в променливата напримерно $MySQLQuery.
[*]Променливата $MySQLQuery се подава като параметър на функцията mysql_query(), която изпълнява заявката и връща резултата в променливата $result.
[*]Да създадете променлива ( примерно $resrow ) и да съхраните броя на записите, върнати от функцията mysql_fetch_row().
[*]Да използвате цикъла while, който да се изпълнява, докато свърши редовете в резултата.
[*]Променливата $resrow е едномерен масив и неговият първи елемент съхранява стойността на първото поле на таблицата Maildata. Имрто на полето е присвоен като етикет на елемента.
[*]В тялото на цилъла while за да извлечете ред по ред информацията от таблицата Maildata Чрез използване на функцията mysql_fetch_array() и да визуализирате информацията в Web страницата.

Обновяване на информацията в таблица

Видяхте как може да вмъквате информация в таблица, по същия начин можете и да я обновявате информацията, съхранена в таблица. За целта се използват командите update на MySQL. Когато се обновява информация в таблица, е добра идея да се визуализира информацията, преди да се промени. Извършването на обновяването на информация в таблица обикновено се извършва по-следния начин.


[*]Първо трябва да приемете информацията в HTML страница кой запис трябва да се обнови. Тзи страница обикновено включва уникално поле, което обикновено е първичен ключ.
[*]Когато потребителя натисне бутона Submit, се изпълнява PHP скрипт.
[*]Скриптът осъществява връзка с MySQL и избира база данни
[*]След това заявката се предава на MySQL. Заявката се специфира с помоща на клаузата where. условието използвано в клаузата where, осигорява, че само един запис ще се върне от заявката.
[*]След това върнатата информация се препраща към браузъра
[*]След това информацията се визуализира в HTML форма, създадена с PHP скрипт.
[*]Контролите в HTML страницата показват стойностите от върнатия резултат. Формата се визуализира в браузъра.
[*]Потребителя прави необходимите промени в информацията и натиска бутона Submit, за да покаже, че информацията трябва да се обнови.
[*]Друг PHP скрипт осъществява нова връзка с базата и обновява информацията в таблицата, която използва командата update.
[*]Заявката се изпълнява чрез функцията mysql_quert().
[*]Върнатата стойност показва дали информацията е била обновена успешно


Следващия код създава HTML, която показва всички записи, намиращи се в таблицата Maildata. Всеки запис съдържа препратката редактиране. Когато потребителят избере тази препратка, той може да промени информацията в записа. При избиране на препратката информацията в полето Email на съответния запис се предава на следващата HTML страница. Новата HTML страница ще визуализира запис за редактиране. Запишете следващия код.

<html>
<body>

<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

$selectdb = mysql_select_db("Myailinglist")
or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

$sqlquery = "SELECT * from Maildata";

$queryresult = mysql_query($sqlquery)
or die ("Заявката не може да се изпълни");

while ($row = mysql_fetch_array($queryresult))
{


echo "ИМЕ: ";
echo .row["Name"].;
echo <br>";

echo "e-mail: ";
echo .row["Email"].;
echo <br>";

echo "Втори e-mail: ";
echo .row["Secondaryemail"].;
echo <br>";

<a href=\"displayform.php?email=".row["Email"]."\">Редактиране</a>

}

?>

</body>
</html>


Web страницата създадена чрез горния код, ще показва информацията на записа за редактиране. След като потребителя натиска бутона Редактиране, информацията се изпраща към сървара.
Запишете следващия код под името displayform.php

<html>
<body>
<form name="Maildata" method="Post" action="update.php">
<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

$selectdb = mysql_select_db("Myailinglist")
or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

$sqlquery = "SELECT * from Maildata WHERE Email='$email'";

$queryresult = mysql_query($sqlquery)
or die ("Заявката не може да се изпълни");

If($row = mysql_fetch_array($queryresult))
{
echo "ИМЕ: ";
echo .row["Name"].;
echo <br>";

echo "e-mail: ";
echo .row["Email"].;
echo <br>";

echo "Втори e-mail: ";
echo "<input type=\"text\" name=\"Secondary\" value=\".row["Secondaryemail"]\">";
echo <br>";

<input type=\"hiden\" name=\"email\" value=\".row["Email"]\">


<input type=\"submit\" name=\"Submit\" value=\"Изпрати\">
}

?>

</body>
</html>


След това обновената информация се извлича от базата данни и се показва в нова HTML страница. Запишете следващия код под името update.php


<html>
<body>

<?php

$connection = mysql_connect ("localhost", "root", "")
or die ("Не може да се осъществи връзка със сървара");

$selectdb = mysql_select_db("Myailinglist")
or die ("Не може да се изберете базата данни");

echo "Базата данни е избрана успешно";

$sqlquery = "Update Maildata SET Secondaryemail='$secondaryemail' Where Email='$email'";

echo $sqlquery;

result="mysql_quert($sqlquery)
or die ("Не може да се изпълни заявката");

echo "Записът е обновен успешно";
?>

</body>
</html>



/ Трябва да сте регистриран за да напишете коментар /