Похожие презентации:
Мировые информационные ресурсы. Лекция 7. Поддержка баз данных в РНР
1. Мировые информационные ресурсы Лекция 7. Поддержка баз данных в РНР
2. MySQL
— СУБД на базе SQL, разработанная исопровождаемая фирмой Т.с.Х DataKonsultAB
(Стокгольм, Швеция).
MySQL распространяется на условиях общей лицензии
GNU (GPL, GNU Public License).
Полное описание текущей лицензионной политики
MySQL приведено на сайте MySQL
(http://www.mysql.com/).
Настройка MySQL
- состоит из создания новых баз данных и
редактирования таблиц привилегий, управляющих
доступом к базам данных MySQL.
2
3. Стандартные функции РНР для работы с MySQL
Последовательность действий при взаимодействии ссервером MySQL:
Установить соединение с сервером MySQL. Если
попытка завершается неудачей, вывести
соответствующее сообщение и завершить процесс.
Выбрать базу данных сервера MySQL. Если попытка
выбора завершается неудачей,
вывести соответствующее сообщение и завершить
процесс. Допускается одновременное
открытие нескольких баз данных для обработки
запросов.
Обработать запросы к выбранной базе (или базам).
После завершения обработки запросов закрыть
соединение с сервером баз данных.
3
4. Функция mysql_connect( )
- устанавливает связь с сервером MySQL. Синтаксис:mysql_connect ([хост [:порт] [:сокет] [, имя
пользователя] [, пароль])
В параметре хост передается имя хостового
компьютера, указанное в таблицах привилегий
сервера MySQL. Оно же используется для
перенаправления запросов на web-сервер, на котором
работает MySQL, поскольку к серверу MySQL можно
подключаться в удаленном режиме.
Если параметр хост не задан, mysql_connect( )
пытается установить связь с локальным хостом.
4
5. Функция mysql_connect( )
Пример:@mysql_connect(" localhost", "web", "4tf9zzzf") or
die("Could not connect to MySQL server!");
Знак @ перед вызовом функции mysql_connect( )
подавляет все сообщения об ошибках, выдаваемые
при неудачной попытке подключения, — они
заменяются сообщением, указанным при вызове die( ).
Значение, возвращаемое при вызове mysql_connect( ),
не используется, если устанавливается
всего одно
соединение с сервером MySQL.
5
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 - идентификаторы соединения.
6
7. Функция mysql_pconnect( )
обеспечивает поддержку восстанавливаемых(persistent) соединений.
рекомендуется использовать в многопользовательских
средах вместо mysql_connect( ) для экономии
системных ресурсов.
По типам параметров и возвращаемого значения
функция mysql_pconnect( ) в точности совпадает c
mysql_connect( ).
7
8. Функция mysql_select_db( )
Функция mysql_select_db( )- выбор базы данных, находящейся на сервере.
Синтаксис:
mysql_select_db (имя_базы_данных [,
идентификатор_соединения])
Параметр имя_базы_данных идентификатор базы
данных, возвращаемый функцией mysql_select_db( ).
Параметр идентификатор_соединения обязателен при
наличии нескольких открытых соединений с сервером
MySQL.
8
9. Функция mysql_select_db( )
Функция mysql_select_db( )Пример:
<?
@mysql_connect("localhost", "web", "4tf9zzzf") or
die("Невозможно подключиться к серверу MySQL!");
@mysql_select_db("company") or die("Выбор базы
данных company невозможен!");
?>
Если в программе выбирается только одна база
данных, сохранять ее идентификатор не
обязательно.
При выборе нескольких баз данных возвращаемые
идентификаторы сохраняются.
Если идентификатор не указан, используется
последняя выбранная база данных.
9
10. Функция mysql_close( )
- закрывает соединение, определяемоенеобязательным параметром
идентификатор_соединения, после завершения
работы с сервером MySQL.
Синтаксис:
mysql_close ([идентификатор_соединения])
Если параметр не задан, функция mysql_close( )
закрывает последнее открытое соединение.
В этом примере указывать идентификатор соединения
не нужно, поскольку на момент вызова mysql_close( )
существует лишь одно открытое соединение с
сервером.
Соединения, открытые функцией mysql_pconnect( ),
закрывать не обязательно.
10
11. Функция mysql_query( )
- обеспечивает интерфейс для обращения с запросами к базамданных.
Синтаксис:
mysql_query (запрос [, идентификатор_соединения])
Параметр запрос содержит текст запроса на языке SQL. Запрос
передается либо соединению, определяемому необязательным
параметром идентификатор_соединения, либо, при отсутствии
параметра, последнему открытому соединению.
При успешном выполнении команды SQL SELECT возвращается
идентификатор результата, который впоследствии передается
функции mysql_result( ) для последующего форматирования и
отображения результатов запроса.
Если обработка запроса завершилась неудачей, функция
возвращает FALSE.
11
Количество записей, участвующих в запросе, определяется
при помощи функции mysql_num_rows( ).
12. Функция mysql_free_result()
- освобождает всю память, связанную с даннымзапросом. При вызове ей передается идентификатор
результата, возвращаемый mysql_query( ).
12
13. Функция mysql_affected_rows()
Функция mysql_affected_rows()- возвращает количество записей, участвующих в
запросе SQL с командами INSERT, UPDATE, REPLACE
или DELETE.
- не работает с запросами, основанными на команде
SELECT.
- при выполнении команды DELETE без секции
WHERE mysql_affected_rows( ) всегда возвращает 0.
Синтаксис:
mysql_affected_rows ([идентификатор_соединения])
13
14. Функция mysql_affected_rows()
Функция 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
14
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
15
16. Функция mysql_result()
используется в сочетании с mysql_query( ) (привыполнении запроса с командой SELECT) для получения
набора данных. Синтаксис:
mysql_result (идентификатор_результата, запись [, поле])
В параметре идентификатор_результата передается
значение, возвращенное функцией mysql_query( ).
Параметр запись ссылается на определенную запись
набора данных, определяемого параметром
идентификатор_результата.
В параметре поле могут передаваться:
смещение поля в таблице;
имя поля;
имя поля в формате имя_поля_имя_таблицы.
16
17. Функция mysql_result()
<?@mysql_connect("localhost", "web", "ffttss")
or die("Невозможно подключиться к серверу MySQL!");
@mysql_select_db("company")
or die("Выбор базы данных company невозможен!");
$query = "SELECT * FROM products";
$result = mysql_query($query);
$x = 0;
print "<table border=1>\n";
print "<tr><td> ID
продукта<td>Наименование<td>Цена</tr>\n";
17
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 "<tr><td>$id<td>$name<td>$price</tr>\n";
$x++;
endwhile;
print "</table>";
mysql_close();
?>
18
19. Функция mysql_result()
Результат:<table border=1>
<tr><td> ID продукта<td>Наименование<td>Цена</tr>
<tr><td>10021<td>apples<td>54.00</tr>
<tr><td>10024<td>oranges<td>60.50</tr>
<tr><td>10038<td>bananas<td>53.45</tr>
<tr><td>10039<td>pears<td>44.45</tr>
</table>
19
20. Функция mysql_fetch_row()
Функция 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 "<table border=1>\n";
print "<tr><td> ID
продукта<td>Наименование<td>Цена</tr>\n";
20
21. Функция mysql_fetch_row()
Функция mysql_fetch_row()while ($row = mysql_fetch_row($result)) :
print "<tr><td>".$row[0]."<td>".$row[1]."<td>"
.
$row[2]."</tr>\n";
endwhile;
print "</table>";
mysql_close();
21
22. Функция mysql_fetch_array( )
- аналогична mysql_fetch_row( ), однако по умолчанию значенияполей записи сохраняются в ассоциативном массиве. Можно
выбрать тип индексации (ассоциативная, числовая или
комбинированная). Синтаксис:
mysql_fetch_array (идентификатор результата [,
тип_индексации])
В параметре идентификатор_результата передается значение,
возвращенное функцией mysql_query( ).
Параметр тип_индексации принимает одно из следующих
значений:
MYSQL_ASSOC — функция mysql_fetch_array( ) возвращает
ассоциативный массив.
MYSQL_NUM — функция mysql_fetch_array( ) возвращает массив с
числовой индексацией;
MYSQL_BOTH — к полям возвращаемой записи можно обращаться
22
и числовым, и по ассоциативным индексам.
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 "<table border=1>\n";
print "<tr><td> ID продукта<td>Наименование<td>Цена</tr>\n";
while ($row = mysql_fetch_array($result)) :
print "<tr><td>".$row["prod_id"]."<td>".$row["prod_name"]."<td>"
.$row["prod_price"]."</tr>\n";
endwhile;
print "</table>";
mysql_close();
23
24. Пример
Простейшая поисковая система- предназначена для поиска информации о клиентах.
В форме пользователь вводит ключевое слово и выбирает
категорию (имя, идентификатор или адрес электронной почты
клиента), в которой будет производиться поиск.
Если введенное пользователем имя, идентификатор или адрес
существует, поисковая система извлекает из базы данных
остальные атрибуты. Затем по идентификатору покупателя из
таблицы orders выбирается история заказов.
Если заданное ключевое слово не встречается в категории,
указанной пользователем, поиск прекращается, программа
выводит соответствующее сообщение и снова отображает
форму.
24
25. Пример
<? $form ="<form action=\"search.php\" method=\"post\">
<input type=\"hidden\" name=\"seenform\" value=\"y\">
Ключевое слово:<br>
<input type=\"text\" name=\"keyword\" size=\"20\" maxlength=\"20\"
value=\"\"><br>
Критерии поиска:<br>
<select name=\"category\">
<option value=\"\">Категория:
<option value-\"cust_id\">ID
<option value=\"cust_name\">Имя
<option value=\"cust_email\">E-mail
</select><br>
<input type=\"submit\" value=\"search\"> ,
</form>";
25
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);
26
27. Пример
if (mysql_num_rows($result) == 0) :print "Записи не выбраны. Новый поиск:";
print $form;
else :
list($id, $name, $email) = mysql_fetch_row($result);
print "<h3>Информация о клиентах:</h3>";
print "<b>Имя:</b> $name <br>";
print "<b>Id:</b> $id <br>";
print "<b>E-mail:</b> <a hre=\"mailto:$email\">$email</a>
<br>";
print "<h3>История закупок:</h3>";
$query = "SELECT order_id, prod_id, quantity FROM orders
WHERE cust_id = '$id' ORDER BY quantity DESC";
$result = mysql_query($query);
27
28. Пример
print "<table border = 1>";print "<tr><td>ID закупки<td>ID
продукта<td>Количество</tr>";
while (list($order_id, $prod_id, $quantity) =
mysql_fetch_row($result));
print "<tr><td>$order_id<td>$prod_id<td>$quantity</tr>";
endwhile;
print "</table>";
endif;
endif;
?>
28
29. Пример
Если ввести ключевое слово Milano и выбрать враскрывающемся списке категорию
Customer Name (Имя клиента), программа выводит
следующую информацию:
Информация о клиентах:
Имя: Milano
ID: 10023
E-mail: [email protected]
История закупок:
ID закупки
100003
100012
55
100005
100211
60
ID продукта
Количество
29
30. Расширение mysqli
разработано для поддержки нового программногоинтерфейса MySQL версий 4.1 и 5.0.
усовершенствования по сравнению с mysql:
функциональность bind/prepare/execute, поддержка
курсоров, использование кодов ошибок SQLSTATE,
выполнение нескольких запросов за одно обращение к
функции, анализ индексов.
практически любая функция mysqli имеет аналог в виде
метода или класса mysql.
Способ обращения к вызовам и методам:
$mysqli->connect() - вызов метода некоторого
экземпляра класса mysqli.
30
31. Расширение mysqli
Одновременное выполнение нескольких запросов —функция mysqli_multi_query()
Пример:
<?$conn = mysqli_connect ("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();
31
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
32
AddType application/x-httpd-php .php
33. Взаимодействие PHP с СУБД Oracle
Пример:<html><head><title>Access to Oracle from php</title></head>
<body><?php
if ($c = 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")."<br>";
} OCILogoff($c);
} else {
$err = OCIError();
echo "Oracle Connect Error " . $err[text];
}
?><hr>
33
34. Взаимодействие PHP с СУБД Oracle
Пример:<?php
if ($c = ora_logon("scott@orcl","tiger")) {
$curs = ora_do($c, "SELECT ename, sal FROM emp");
while (ora_fetch($curs)) {
echo "ename = " . ora_getcolumn($curs, 0) .
", sal = " . ora_getcolumn($curs, 1) . "<br/>";
} ora_logoff($c);
} else {
echo "Oracle Connect Error " . ora_error();
}?>
<hr>
</body></html>
34
35. Взаимодействие PHP с СУБД Oracle
Пример 2: insert.php?empname=John&empno=01:<html><head><title>Access to Oracle from php</title></head>
<body><h3>Пример вставки INSERT:</h3>
<?php if ($c = OCILogon("scott", "tiger", "orcl")) {
$name = (string)$_REQUEST['empname'];
$no = (int)$_REQUEST['empno'];
$query = "INSERT INTO emp (ename, empno) VALUES (:bind1, :bind2)";
$s = OCIParse($c, $query);
OCIBindByName($s, ":bind1", $name);
OCIBindByName($s, ":bind2", $no);
OCIExecute($s, OCI_DEFAULT);
OCICommit($c);
OCILogoff($c);
} ?>Done.<hr></body></html>
35
36. ODBC (Open Database Connectivity)
ODBC (Open Database Connectivity)- необходим при разработке приложений, которые не
должны зависеть от СУБД; такие приложения работают
«над» существующей инфраструктурой клиентской
базы данных.
- представляет собой интерфейс прикладных программ
(API), позволяющий использовать общий набор
абстрактных функций для работы с разными типами
баз данных.
Работа с сервером баз данных через ODBC возможна
лишь в том случае, если этот сервер является ODBCсовместимым.
Драйверы ODBC различаются по целям, платформе и
назначению.
36
37. Поддержка ODBC в РНР
Функции ODBC в РНР, обычно называемые общимифункциями ODBC, не только обеспечивают типовую
поддержку ODBC, но и позволяют работать с
некоторыми СУБД, обладающими собственным API,
через стандартный ODBC API.
К их числу относятся следующие СУБД:
Adabas D;
IODBC;
IBM DB2;
Solid;
Sybase SQL Anywhere.
37
38. Функция odbc_connect( )
Функция odbc_connect( )- установка связи с ODBC-совместимой базой данных. Синтаксис:
odbc_connect (источник_данных, имя_пользователя, пароль [,
тип_курсора])
Параметр источник_данных определяет ODBC-совместимую базу
данных, с которой устанавливаются связь.
Параметр тип_курсора предназначен для устранения проблем,
возникающих при работе с некоторыми драйверами ODBC. Он
может принимать одно из четырех возможных значений:
SQL_CUR_USE_IF_NEEDED;
SQL_CURSOR_USE_ODBC;
SQL_CUR_USE_DRIVER;
SQL_CUR_DEFAULT.
Пример:
obdc_connect("myAccessDB", "user", "pass") or die( "Could not
connect to ODBC database");
38
39. Функция odbc_pconnect( )
- используется для открытия восстанавливаемых(persistent) соединений с базами данных.
- экономит системные ресурсы, поскольку
odbc_pconnect( ) проверяет, не было ли данное
соединение открыто ранее, и если было, использует
предыдущее соединение.
39
40. Функция odbc_close( )
Функция odbc_close( )- закрыть соединение с ODBC-совместимой базой
данных после завершения работы и освободить
ресурсы, используемые открытым соединением.
Синтаксис:
odbc_close ([идентификатор_соединения])
В параметре идентификатор_соединения передается
идентификатор открытого соединения.
Пример:
odbc_connect("myAccessDB", "user", "secret") or
die("Could not connect to ODBC database");
print "Currently connected to ODBC database!";
odbc_close($connect);
40
41. Функция odbc_prepare( )
Функция odbc_prepare( )- подготовка SQL-запроса. Синтаксис:
odbc_prepare (идентификатор_соединения , запрос)
В параметре идентификатор_соединения передается
идентификатор соединения, возвращаемый функцией
odbc_connect( ).
Если запрос не может быть выполнен, функция
возвращает FALSE; в противном случае возвращается
идентификатор результата.
41
42. Функция odbc_execute( )
Функция odbc_execute( )- выполняет запрос, подготовленный функцией odbc_prepare( ).
Синтаксис:
odbc_execute (идентификатор результата [, параметры])
В параметре передается идентификатор результата, возвращаемый
при успешном вызове odbc_prepare( ).
Пример:
$connect = @obdc_connect("myAccessDB", "user", "secret") or
die("Could not connect to ODBC database");
$query = "UPDATE customers SET cust_id = \"Milano, Inc.\" WHERE
cust_id \"2000cu\"";
$result = odbc_prepare($connect, $query) or die("Couldn't prepare
query!");
$result = odbc_execute($result) or die("Couldn't execute query!");
odbc_close($connect);
- показана транзакция ODBC, при которой данные запроса не
42
отображаются в браузере (как обычно при использовании команды
SELECT).
43. Функция odbc_exec( )
- объединяет odbc_prepare( ) и odbc_execute( ). Синтаксис:odbc_exec (идентификатор_соединения, запрос)
В параметре передается идентификатор соединения, возвращаемый
функцией odbc_connect( ).
Если запрос не может быть выполнен, функция возвращает FALSE; в
противном случае возвращается идентификатор результата,
используемый при последующих вызовах функций:
Пример
obdc_connect("myAccessDB", "user", "secret") or die("Could not
connect to ODBC database");
$query = "SELECT * FROM customers";
$result = odbc_exec($connect, $query) or die("Couldn't execute
query!");
odbc_close($connect) ;
При успешном выполнении переменной $result присваивается
43
идентификатор результата; в случае неудачи ей присваивается
значение FALSE.
44. Функция odbc_result_all( )
- форматирует и отображает все записи для идентификаторарезультата, полученного при вызове odbc_exec( ) или
odbc_execute(). Синтаксис:
odbc_result_all (идентификатор_результата [, формат_таблицы])
В параметре передается идентификатор результата, возвращаемый
при успешном вызове odbc_exec( ) или odbc_execute( ). В параметре
формат_таблицы передаются характеристики таблицы HTML.
Пример:
obdc_connect("myAccessDB", "user", "secret")
or die("Could not connect to ODBC database");
$query = "SELECT * FROM customers";
$result = odbc_exec($connect, $query) or die("Couldn't execute
query!");
odbc_result_all($result, "BGCOLOR='#c0c0c0' border='1' ");
odbc_close($connect);
Содержимое таблицы customers будет выведено в таблице на сером
44
45. Функция odbc_free_result( )
Функция odbc_free_result( )- освобождение всех ресурсов, связанных с завершенными
операциями. Синтаксис:
odbc_free_result (идентификатор_результата)
Все ресурсы памяти автоматически освобождаются по завершении сценария;
таким образом, вызов функции odbc_free_result( ) необходим лишь для очень
больших запросов, расходующих очень большие объемы памяти.
Пример
obdc_connect("myAccessDB", "user", "secret") or die("Could not
connect to ODBC database");
$query = "SELECT * FROM customers":
$result = odbc_exec($connect, $query) or die("Couldn't execute
query!");
odbc_result_all($result, "BGCOLOR='#c0c0c0' border='1' "');
odbc_free_result($result);
odbc_close($connect);
После того как функция odbc_result_all( ) завершила использование
идентификатора результата, память возвращается в систему при помощи
45
odbc_free_result( ).