Опубликован: 08.05.2007 | Доступ: свободный | Студентов: 12883 / 3013 | Оценка: 4.13 / 3.77 | Длительность: 12:58:00
Лекция 9:

Доступ к базам данных

< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Аннотация: PHP обеспечивает поддержку ODBC (Open DataBase Connectivity), что позволяет обращаться к любой совместимой с ODBC системе управления базами данных (СУБД), если в системе или сети доступно Имя источника данных (DSN -- Data Source Name), или доступна строка соединения без DSN

Доступ ODBC

PHP обеспечивает поддержку ODBC (Open DataBase Connectivity), что позволяет обращаться к любой совместимой с ODBC системе управления базами данных (СУБД), если в системе или сети доступно Имя источника данных (DSNData Source Name) или доступна строка соединения без DSN. Это включает доступ к таким реляционным базам данных, как Oracle, DB2, MS SQL Server, MySQL, и MS Access. Так как PHP включает функции доступа к базам данных MySQL без DSN, которые не требуют ODBC, в этом разделе для демонстрации методов ODBC будет применяться MS Access. Примеры можно использовать также с другими СУБД, совместимыми с ODBC.

Соединения ODBC с помощью DSN

Чтобы соединиться с базой данных, используя ODBC, сначала необходимо создать системное имя источника данных.

Вот как создается соединение ODBC с базой данных MS Access

Откройте в Панели управления значок Администрирование.

Сделайте в раскрывшемся окне двойной щелчок на значке Источники данных (ODBC).

Выберите вкладку Системный DSN.

На вкладке Системный DSN щелкните на кнопке Добавить.

Выберите Microsoft Access Driver. Щелкните на кнопке Готово.

В следующем окне щелкните на кнопке Выбрать, чтобы найти базу данных.

Задайте для базы данных Имя источника данных (DSN).

Щелкните на кнопке OK.

Конфигурация DSN должна задаваться на компьютере, на котором размещен сайт Web. Если сайт располагается на удаленном сервере, необходимо задать конфигурацию на этом сервере.

После установления соединения ODBC можно использовать специальные функции PHP для соединения с базой данных и извлечения записей. Эти функции PHP описаны ниже.

Соединения ODBC без DSN

Соединения без DSN не требуют создания DSN системного уровня для соединения с базами данных и предоставляет некоторую альтернативу DSN. Вместо использования DSN для соединения с базой данных, разработчик определяет необходимую информацию прямо в приложении. При соединении без DSN разработчик может использовать стандарты соединения, отличные от ODBC, такие, как OLE DB. Соединения без DSN должны применяться в том случае, когда отсутствует доступ к серверу для регистрации DSN.

В Microsoft Access для создания соединений без DSN используется следующая строка соединения:

Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\path\to\database.mdb

odbc_connect(dsn/строка соединения без dsn,имя_пользователя,пароль) – функция, используемая для соединения с источником данных ODBC. Функция получает четыре параметра: имя источника данных ( dsn ) или строку соединения без dsn, имя пользователя, пароль и необязательный тип курсора. В тех случаях, когда имя пользователя, пароль, и тип курсора не требуются, параметры можно заменить пустой строкой — ''. id соединения, возвращаемый этой функцией, требуется другим функциям ODBC. Можно иметь одновременно открытыми несколько соединений, если они либо имеют различные id, либо используют различные имя пользователя и пароль.

odbc_exec(id_соединения, строка_запроса SQL) – функция, используемая для выполнения оператора SQL. Функция получает два параметра: объект соединения id, созданный функцией odbc_connect(), и оператор SQL. При возникновении ошибки возвращает FALSE. Возвращает множество записей, если команда SQL выполняется успешно.

odbc_fetch_array(имя множества записей) – используется для извлечения записей или строк из множества записей как ассоциативного массива. Имя множества записей создается при вызове функции odbc_exec(). Эта функция возвращает массив строк, либо — FALSE.

odbc_num_rows(имя множества записей) – возвращает число строк в множестве результатов ODBC. Функция возвращает -1, если возникает ошибка. Для операторов INSERT, UPDATE и DELETE функция odbc_num_rows() возвращает число затронутых строк. Для предложения SELECT это может быть число доступных строк. Примечание: использование odbc_num_rows() для определения числа доступных строк после оператора SELECT возвращает -1 для драйверов MS Access.

odbc_close(id соединения) – закрывает соединение с сервером базы данных, связанное с данным идентификатором соединения.

Добавление записей

Применяя функции ODBC, рассмотренные в предыдущем разделе, вместе с языком SQL можно добавлять записи в таблицы базы данных. Записи добавляют в таблицу базы данных с помощью формы, представляющей поля ввода данных. Затем с помощью кнопки вызывается сценарий PHP для записи новой информации в таблицу с помощью команды SQL INSERT. Типичная форма ввода для добавления новой записи в таблицу Survey показана ниже.


Поля формы именуются соответствующим образом:

Name — 'Name', Email — 'Email', 
Web Connection — 'Connection', 
Residence (City/ST/Country) — 'Residence', 
Age — 'Age', Gender — 'Gender', 
Comments — 'Comments'.

Прежде чем переходить к коду, покажем синтаксис оператора SQL INSERT:

INSERT INTO TableName (FieldName1 [,FieldName2]...) VALUES (Value1 [,Value2]...)

Более подробно оператор INSERT рассматривается в "Доступ к базе данных MySQL" .

Следующий код применяется для обработки данных формы VisitorSurvey.php:

VisitorSurvey.php

<?php

if ($_POST[submit] == "Submit") 
{

// Получение данных формы и присвоение скалярным переменным 

$Name = $_POST[Name];
$Email = $_POST[Email];
$Connection = $_POST[Connection];
$Residence = $_POST[Residence];
$Age = $_POST[Age];
$Gender = $_POST[Gender];
$Comments = $_POST[Comments];

//Установление соединения с базой данных 

$conn = odbc_connect('Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\path\to\database.mdb','','');

// Оператор SQL 

$sqlstring = "INSERT INTO Survey " . 
	"(Name,Email,Connection,Residence,Age,Gender,Comments) VALUES ('$Name', '$Email', '$Connection', 		 
		'$Residence', '$Age', '$Gender', '$Comments')";
	
//Выполнение оператора SQL и сохранение результатов в множестве записей 
	
$rs = odbc_exec($conn,$sqlstring);

odbc_close($conn);

}

?>
Пример 9.1.

После щелчка на кнопке отправки создается суперглобальный массив $_POST, содержащий значения формы. Значения массива присваиваются скалярным переменным. Это упрощает кодирование оператора SQL. Затем выполняется оператор odbc_connect(). Этому оператору требуется три параметра – DSN или строка соединения без DSN, имя пользователя и пароль. Здесь для соединения с базой данных Access используется строка соединения без DSN. Так как Access для доступа к данным не требует имя пользователя или пароль, то параметры username и password кодируются как значения NULL. Ссылка на соединение сохраняется в переменной $conn. Это пример ссылочной переменной PHP.

В отличие от скаляров или переменных массивов, ссылочные переменные не применяются в программе непосредственно, но часто используются в качестве параметров для других функций. После оператора соединения составляется оператор SQL INSERT и присваивается переменной $sqlstring. Затем функция odbc_exec() выполняет оператор SQL, создающий множество записей (множество записей из базы данных). Это множество записей присваивается $rs, другой ссылочной переменной PHP. Отметим, что функция odbc_exec() требует два параметра — $conn (ссылка на текущее соединение базой данных) и $sql (ссылка на текущий оператор SQL). В конце вызывается функция odbc_close() для закрытия текущего соединения с базой данных.

Для приложений такого типа обычно желательно выполнить проверку данных, прежде чем добавлять данные в таблицу базы данных. Это необходимо сделать перед тем, как создавать соединение с базой данных, используя технику, рассмотренную в "Базовая обработка форм" .

В случае ошибки кодирования данные не заносятся в таблицу базы данных, а PHP выводит предупреждение или сообщение об ошибке. В ситуациях такого типа полезно подавить эти сообщения, добавить код для проверки ошибок вручную и создать более понятный для пользователя вывод. Это можно сделать сразу после оператора odbc_exec(), проверяя статус вновь созданного множества записей — $rs.

Предположим в предыдущем коде, что функция odbc_exec() содержит вместо $sql параметр $sqlString. PHP немедленно остановит выполнение страницы и выведет следующее сообщение:

Warning: odbc_exec() [function.odbc-exec]: 
SQL error: [Microsoft][ODBC Microsoft Access Driver]
  Invalid use of null pointer , 
SQL state S1009 in SQLExecDirect in 
  C:\ApacheRoot\VisitorSurvey.php on line 38

Ошибку PHP можно подавить с помощью оператора управления ошибками "@". После подавления ошибки можно добавить код для создания более понятного пользователю ответа. Такой подход показан ниже:

VisitorSurvey.php

<?php

if ($_POST[submit] == "Submit") 
{

//Извлечение данных формы и присвоение скалярным переменным 

$Name = $_POST[Name];
$Email = $_POST[Email];
$Connection = $_POST[Connection];
$Residence = $_POST[Residence];
$Age = $_POST[Age];
$Gender = $_POST[Gender];
$Comments = $_POST[Comments];

//Установление соединения с базой данных 

$conn = @odbc_connect('Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:\path\to\database.mdb','','');

//Оператор SQL 

$sql = "INSERT INTO Survey " . 
	"(Name,Email,Connection,Residence,Age,Gender,Comments) VALUES ('$Name', '$Email', '$Connection', 		 
		'$Residence', '$Age', '$Gender', '$Comments')";
	
//Выполнение оператора SQL и сохранение результатов в множестве записей 
	
$rs = @odbc_exec($conn,$sqlstring);

if (!$rs)
{

echo "Произошла ошибка. Попробуйте еще раз. ";

}

else

{

echo "Запись была успешно добавлена.";

}

odbc_close($conn);

}

?>
Пример 9.2.

После функции odbc_exec() используется оператор if для проверки статуса множества записей — $rs. Если множество записей успешно создано, то выводится сообщение "Запись была успешно добавлена". Если возникает проблема, выводится сообщение "Произошла ошибка. Попробуйте еще раз."

< Лекция 8 || Лекция 9: 123 || Лекция 10 >
Максим Матросов
Максим Матросов
Наталья Джабасова
Наталья Джабасова