Слайд 1Мировые информационные ресурсы
Лекция 7. Поддержка баз данных в РНР
Слайд 2MySQL
— СУБД на базе SQL, разработанная и сопровождаемая фирмой Т.с.Х
DataKonsultAB
(Стокгольм, Швеция).
MySQL распространяется на условиях общей лицензии GNU
(GPL, GNU Public License).
Полное описание текущей лицензионной политики MySQL приведено на сайте MySQL
(http://www.mysql.com/).
Настройка MySQL
- состоит из создания новых баз данных и редактирования таблиц привилегий, управляющих доступом к базам данных MySQL.
Слайд 3Стандартные функции РНР для работы с MySQL
Последовательность действий при взаимодействии
с сервером MySQL:
Установить соединение с сервером MySQL. Если попытка завершается
неудачей, вывести
соответствующее сообщение и завершить процесс.
Выбрать базу данных сервера MySQL. Если попытка выбора завершается неудачей,
вывести соответствующее сообщение и завершить процесс. Допускается одновременное
открытие нескольких баз данных для обработки запросов.
Обработать запросы к выбранной базе (или базам).
После завершения обработки запросов закрыть соединение с сервером баз данных.
Слайд 4Функция mysql_connect( )
- устанавливает связь с сервером MySQL. Синтаксис:
mysql_connect
([хост [:порт] [:сокет] [, имя пользователя] [, пароль])
В параметре хост
передается имя хостового компьютера, указанное в таблицах привилегий сервера MySQL. Оно же используется для перенаправления запросов на web-сервер, на котором работает MySQL, поскольку к серверу MySQL можно подключаться в удаленном режиме.
Если параметр хост не задан, mysql_connect( ) пытается установить связь с локальным хостом.
Слайд 5Функция mysql_connect( )
Пример:
@mysql_connect(" localhost", "web", "4tf9zzzf") or die("Could not
connect to MySQL server!");
Знак @ перед вызовом функции mysql_connect( )
подавляет все сообщения об ошибках, выдаваемые при неудачной попытке подключения, — они заменяются сообщением, указанным при вызове die( ).
Значение, возвращаемое при вызове mysql_connect( ), не используется, если устанавливается всего одно соединение с сервером MySQL.
Слайд 6Функция mysql_connect( )
Если программа устанавливает соединения с несколькими серверами
MySQL на разных хостах, следует сохранить идентификатор соединения, возвращаемый при
вызове mysql_connect(), чтобы адресовать последующие команды нужному серверу MySQL.
Пример:
$link1 = @mysql_connect("www.somehost.com", "web", "abcde") or die("Could not connect to MySQL server!");
$link2 = @mysql_connect("www.someotherhost.com", "usr", "secret") or die("Could not connect to MySQL server!");
// $link1 и $link2 - идентификаторы соединения.
Слайд 7Функция mysql_pconnect( )
обеспечивает поддержку восстанавливаемых (persistent) соединений.
рекомендуется использовать
в многопользовательских средах вместо mysql_connect( ) для экономии системных ресурсов.
По типам параметров и возвращаемого значения функция mysql_pconnect( ) в точности совпадает c mysql_connect( ).
Слайд 8Функция mysql_select_db( )
- выбор базы данных, находящейся на сервере.
Синтаксис:
mysql_select_db
(имя_базы_данных [, идентификатор_соединения])
Параметр имя_базы_данных идентификатор базы данных, возвращаемый функцией mysql_select_db(
).
Параметр идентификатор_соединения обязателен при наличии нескольких открытых соединений с сервером MySQL.
Слайд 9Функция mysql_select_db( )
Пример:
MySQL!");
@mysql_select_db("company") or die("Выбор базы данных company невозможен!");
?>
Если в программе выбирается
только одна база данных, сохранять ее идентификатор не
обязательно.
При выборе нескольких баз данных возвращаемые идентификаторы сохраняются.
Если идентификатор не указан, используется последняя выбранная база данных.
Слайд 10Функция mysql_close( )
- закрывает соединение, определяемое необязательным параметром идентификатор_соединения,
после завершения работы с сервером MySQL.
Синтаксис:
mysql_close ([идентификатор_соединения])
Если параметр не
задан, функция mysql_close( ) закрывает последнее открытое соединение.
В этом примере указывать идентификатор соединения не нужно, поскольку на момент вызова mysql_close( ) существует лишь одно открытое соединение с сервером.
Соединения, открытые функцией mysql_pconnect( ), закрывать не обязательно.
Слайд 11Функция mysql_query( )
- обеспечивает интерфейс для обращения с запросами
к базам данных.
Синтаксис:
mysql_query (запрос [, идентификатор_соединения])
Параметр запрос содержит текст
запроса на языке SQL. Запрос передается либо соединению, определяемому необязательным параметром идентификатор_соединения, либо, при отсутствии параметра, последнему открытому соединению.
При успешном выполнении команды SQL SELECT возвращается идентификатор результата, который впоследствии передается функции mysql_result( ) для последующего форматирования и отображения результатов запроса.
Если обработка запроса завершилась неудачей, функция возвращает FALSE.
Количество записей, участвующих в запросе, определяется при помощи функции mysql_num_rows( ).
Слайд 12Функция mysql_free_result()
- освобождает всю память, связанную с данным запросом.
При вызове ей передается идентификатор результата, возвращаемый mysql_query( ).
Слайд 13Функция mysql_affected_rows()
- возвращает количество записей, участвующих в запросе SQL с
командами INSERT, UPDATE, REPLACE или DELETE.
- не работает с
запросами, основанными на команде SELECT.
- при выполнении команды DELETE без секции WHERE mysql_affected_rows( ) всегда возвращает 0.
Синтаксис:
mysql_affected_rows ([идентификатор_соединения])
Слайд 14Функция mysql_affected_rows()
Пример:
@mysql_connect("localhost", "web", "4tf9zzzf") or die ("Невозможно подключиться к серверу
MySQL!");
@mysql_select_db("company") or die ("Выбор базы данных company невозможен!");
$query = "UPDATE
products SET prod_name = \"pears\" WHERE prod_id = \'10021\' ";
$result = mysql_query($query);
print "Total row updated: ".mysql_affected_rows( );
mysql_close( );
Результат:
Total row updated: 1
Слайд 15Функция mysql_num_rows( )
- определяет количество записей, возвращаемых командой SELECT.
Синтаксис:
mysql_num_rows(результат)
Пример:
@mysql_connect("localhost", "web", "4tf9zzzf") or die("Невозможно подключиться к серверу MySQL!");
@mysql_select_db("company")
or die("Выбор базы данных company невозможен!");
$query = "SELECT prod_name FROM products WHERE prod_name LIKE \"p*\"";
print "Total rows selected:".mysql_num_rows($result);
mysql_close( );
Результат:
Total rows selected: 1
Слайд 16Функция mysql_result()
используется в сочетании с mysql_query( ) (при выполнении
запроса с командой SELECT) для получения набора данных. Синтаксис:
mysql_result (идентификатор_результата,
запись [, поле])
В параметре идентификатор_результата передается значение, возвращенное функцией mysql_query( ).
Параметр запись ссылается на определенную запись набора данных, определяемого параметром идентификатор_результата.
В параметре поле могут передаваться:
смещение поля в таблице;
имя поля;
имя поля в формате имя_поля_имя_таблицы.
Слайд 17Функция mysql_result()
die("Выбор базы данных company невозможен!");
$query = "SELECT * FROM products";
$result = mysql_query($query);
$x = 0;
print "
\n";
print " ID продукта | Наименование | Цена |
\n";
Слайд 18Функция mysql_result()
while ($x < mysql_numrows($result)) :
$id = mysql_result($result, $x,
'prod_id');
$name = mysql_result($result, $x, 'prod_name');
$price = mysql_result($result, $x, 'prod_price');
print "$id$name$price\n";
$x++;
endwhile;
print
"
";
mysql_close();
?>
Слайд 19Функция mysql_result()
Результат:
ID продуктаНаименованиеЦена
10021apples54.00
10024oranges60.50
10038bananas53.45
10039pears44.45
Слайд 20Функция mysql_fetch_row()
- присваивает значения всех полей записи элементам индексируемого массива
(начиная с индекса 0).
Синтаксис: mysql_fetch_row (результат)
Пример:
@mysql_connect( "localhost", "web", "ffttss")
or or die("Невозможно подключиться к серверу MySQL!");
@mysql_select_db("company") or or die("Выбор базы данных company невозможен!");
$query = "SELECT * FROM products";
$result = mysql_query($query);
print "
\n";
print " ID продукта | Наименование | Цена |
\n";
Слайд 21Функция mysql_fetch_row()
while ($row = mysql_fetch_row($result)) :
print "".$row[0]."".$row[1]."" . $row[2]."\n";
endwhile;
print
"";
mysql_close();
Слайд 22Функция mysql_fetch_array( )
- аналогична mysql_fetch_row( ), однако по умолчанию
значения полей записи сохраняются в ассоциативном массиве. Можно выбрать тип
индексации (ассоциативная, числовая или комбинированная). Синтаксис:
mysql_fetch_array (идентификатор результата [, тип_индексации])
В параметре идентификатор_результата передается значение, возвращенное функцией mysql_query( ).
Параметр тип_индексации принимает одно из следующих значений:
MYSQL_ASSOC — функция mysql_fetch_array( ) возвращает ассоциативный массив.
MYSQL_NUM — функция mysql_fetch_array( ) возвращает массив с числовой индексацией;
MYSQL_BOTH — к полям возвращаемой записи можно обращаться и числовым, и по ассоциативным индексам.
Слайд 23Функция mysql_fetch_array( )
Пример:
@mysql_connect( "localhost", "web", "ffttss") or or die("Невозможно
подключиться к серверу MySQL!");
@mysql_select_db("company") or or die("Выбор базы данных company
невозможен!");
$query = "SELECT * FROM products";
$result = mysql_query($query);
print "
\n";
print " ID продукта | Наименование | Цена |
\n";
while ($row = mysql_fetch_array($result)) :
print "".$row["prod_id"]." | ".$row["prod_name"]." | " .$row["prod_price"]." |
\n";
endwhile;
print "
";
mysql_close();
Слайд 24Пример
Простейшая поисковая система
- предназначена для поиска информации о клиентах.
В
форме пользователь вводит ключевое слово и выбирает категорию (имя, идентификатор
или адрес электронной почты клиента), в которой будет производиться поиск.
Если введенное пользователем имя, идентификатор или адрес существует, поисковая система извлекает из базы данных остальные атрибуты. Затем по идентификатору покупателя из таблицы orders выбирается история заказов.
Если заданное ключевое слово не встречается в категории, указанной пользователем, поиск прекращается, программа выводит соответствующее сообщение и снова отображает форму.
name=\"keyword\" size=\"20\" maxlength=\"20\" value=\"\">
Критерии поиска:
Категория:
ID
Имя
E-mail
type=\"submit\" value=\"search\"> ,
";
Слайд 26Пример
if ($seenform != "у") :
print $form;
else :
@mysql_connect( "localhost", "web",
"pass") or or die("Невозможно подключиться к серверу MySQL!");
@mysql_select_db("company") or or
die("Выбор базы данных company невозможен!");
$query = "SELECT cust_id. cust_name, cust_email FROM customers WHERE $category = '$keyword'";
$result = mysql_query($query);
Слайд 27Пример
if (mysql_num_rows($result) == 0) :
print "Записи не выбраны. Новый поиск:";
print
$form;
else :
list($id, $name, $email) = mysql_fetch_row($result);
print "Информация о клиентах:";
print "Имя:
$name
";
print "
Id: $id
";
print "
E-mail: $email ";
print "
История закупок:
";
$query = "SELECT order_id, prod_id, quantity FROM orders WHERE cust_id = '$id' ORDER BY quantity DESC";
$result = mysql_query($query);
Слайд 28Пример
print "";
print "ID закупкиID продуктаКоличество";
while (list($order_id, $prod_id,
$quantity) = mysql_fetch_row($result));
print "$order_id$prod_id$quantity";
endwhile;
print "";
endif;
endif;
?>
Слайд 29Пример
Если ввести ключевое слово Milano и выбрать в раскрывающемся списке
категорию
Customer Name (Имя клиента), программа выводит следующую информацию:
Информация о
клиентах:
Имя: Milano
ID: 10023
E-mail: felix@milano.com
История закупок:
ID закупки ID продукта Количество
100003 100012 55
100005 100211 60
Слайд 30Расширение mysqli
разработано для поддержки нового программного интерфейса MySQL версий 4.1
и 5.0.
усовершенствования по сравнению с mysql: функциональность bind/prepare/execute, поддержка курсоров,
использование кодов ошибок SQLSTATE, выполнение нескольких запросов за одно обращение к функции, анализ индексов.
практически любая функция mysqli имеет аналог в виде метода или класса mysql.
Способ обращения к вызовам и методам:
$mysqli->connect() - вызов метода некоторого экземпляра класса mysqli.
Слайд 31Расширение mysqli
Одновременное выполнение нескольких запросов — функция mysqli_multi_query()
Пример:
("localhost", "test", "", "world");
$query = "SELECT Name FROM Sity;";
$query .=
"SELECT Country FROM Country;";
if ($conn->multi_query($query)) {
do {
if ($result = $mysqli->store_result()){
while ($row = $result->fetch_row())
{printf ("%s\n", $row[0]);}
$result->close();}
}while ($conn->next_result());
}
$conn->close();
Слайд 32Взаимодействие PHP с СУБД Oracle
Настройка конфигурации PHP
Файл php.ini:
extension_dir = "C:\php\...\sapi"
Снять
комментарии со строк
;extension=php_oci8.dll
;extension=php_oracle.dll
;extension=php_dbase.dll
Последний параметр требуется для создания приложений с записью
данных в формате dbf.
Перечисленные библиотеки dll переместить в каталог sapi.
Настройка конфигурации Apache
Файл httpd.conf:
LoadModule php4_module C:/php/.../sapi/php5apache.dll
AddModule mod_php.c
AddType application/x-httpd-php .php
Слайд 33Взаимодействие PHP с СУБД Oracle
Пример:
Access to Oracle from php
= OCILogon("scott", "tiger", "orcl")) {
$s = OCIParse($c, "SELECT ename, sal
FROM emp");
OCIExecute($s, OCI_DEFAULT);
while (OCIFetch($s)) {
echo "ename=". ociresult($s,"ENAME").", sal=".ociresult($s,"SAL")."
";
} OCILogoff($c);
} else {
$err = OCIError();
echo "Oracle Connect Error " . $err[text];
}
?>
Слайд 34Взаимодействие PHP с СУБД Oracle
Пример:
= ora_do($c, "SELECT ename, sal FROM emp");
while (ora_fetch($curs)) {
echo "ename = " . ora_getcolumn($curs, 0) .
", sal = " . ora_getcolumn($curs, 1) . "
";
} ora_logoff($c);
} else {
echo "Oracle Connect Error " . ora_error();
}?>