Разработка библиотеки для осуществления адаптивного поиска в базах данных Web-приложений (бакалаврская работа), страница 5
Описание файла
Документ из архива "Разработка библиотеки для осуществления адаптивного поиска в базах данных Web-приложений (бакалаврская работа)", который расположен в категории "". Всё это находится в предмете "дипломы и вкр" из 8 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "выпускные работы и поступление в магистратуру" в общих файлах.
Онлайн просмотр документа "Разработка библиотеки для осуществления адаптивного поиска в базах данных Web-приложений (бакалаврская работа)"
Текст 5 страницы из документа "Разработка библиотеки для осуществления адаптивного поиска в базах данных Web-приложений (бакалаврская работа)"
{
if(!is_array($options))
$options = array('persistent' => $options);
@include_once "DB/{$type}.php";
$classname = "DB_{$type}";
if(!class_exists($classname))
return DB::raiseError(null, DB_ERROR_NOT_FOUND, null, null,
"Класс DB_{$type} не найден", 'DB_Error', true);
@$obj = new $classname;
foreach($options as $option => $value)
{
$test = $obj->setOption($option, $value);
if(DB::isError($test))
return $test;
}
return $obj;
}
static public function &connect($dsn, $options = array())
{
$dsninfo = DB::parseDSN($dsn);
$type = $dsninfo['phptype'];
@include_once "DB/{$type}.php";
$classname = "DB_{$type}";
if(!class_exists($classname))
return DB::raiseError(null, DB_ERROR_NOT_FOUND, null, null,
"Класс DB_{$type} не найден", 'DB_Error', true);
$db = new $classname;
$db->setOptions($options);
$result = $db->connect($dsninfo, $db->getOption('persistent'));
if(DB::isError($result))
{
$result->addUserInfo(is_array($dsn) ? DB::getDSNString($dsn, true) : $dsn);
return $result;
}
$db->query("SET NAMES utf8");
$result = $db->checkOptions();
if(DB::isError($result))
return $result;
return $db;
}
static public function isError($value)
{
return is_object($value) && ($value instanceof DB_Error);
}
function isConnection($value)
{
return (is_object($value) &&
is_subclass_of($value, 'db_common') &&
method_exists($value, 'simpleQuery'));
}
static public function isManip($query)
{
$manips = 'INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|'
. 'LOAD DATA|SELECT .* INTO .* FROM|COPY|'
. 'ALTER|GRANT|REVOKE|LOCK|UNLOCK';
return preg_match('/^\s*"?(' . $manips . ')\s+/i', $query);
}
static public function errorMessage($value)
{
static $messages;
if(!isset($messages))
$messages = array(
DB_ERROR => 'Неизвестная ошибка базы данных',
DB_ERROR_SYNTAX => 'Синтаксическая ошибка запроса к базе данных',
DB_ERROR_CONSTRAINT=> 'Отсутствует внешний ключ',
DB_ERROR_NOT_FOUND => 'Попытка удалить несуществующий индекс',
DB_ERROR_ALREADY_EXISTS
=> 'Таблица, последовательность или процедура уже существует',
DB_ERROR_UNSUPPORTED
=> 'Запрошенная операция не поддерживается базой данных',
DB_ERROR_MISMATCH
=> 'Фактическое число параметров запроса не совпадает с требуемым',
DB_ERROR_INVALID => 'Ошибка входных данных запроса к базе данных',
DB_ERROR_NOT_CAPABLE
=> 'База данных не предусматривает выполнения запрошенной операции',
DB_ERROR_TRUNCATED
=> 'Возвращаемые данные были получены не полностью',
DB_ERROR_INVALID_NUMBER
=> 'Попытка записи нечислового значения в числовое поле',
DB_ERROR_INVALID_DATE
=> 'Неверный формат даты в запросе к базе данных',
DB_ERROR_DIVZERO
=> 'Ошибка деления на ноль при запросе к базе данных',
DB_ERROR_NODBSELECTED
=> 'Не указана база данных при попытке соединения',
DB_ERROR_CANNOT_CREATE
=> 'Невозможно создать таблицу или файл базы данных',
DB_ERROR_CANNOT_DROP
=> 'Невозможно удалить таблицу или файл базы данных',
DB_ERROR_NOSUCHTABLE
=> 'Попытка обращения к несуществующей таблице',
DB_ERROR_NOSUCHFIELD
=> 'Попытка обращения к несуществующему полю',
DB_ERROR_NEED_MORE_DATA => 'Необходимо больше данных',
DB_ERROR_NOT_LOCKED
=> 'Попытка разблокировать то, что не было заблокировано',
DB_ERROR_VALUE_COUNT_ON_ROW
=> 'Фактическое число параметров запроса не совпадает с требуемым',
DB_ERROR_INVALID_DSN => 'Неверно указан DSN',
DB_ERROR_CONNECT_FAILED
=> 'Невозможно установить соединение с базой данных',
DB_ERROR_EXTENSION_NOT_FOUND=> 'Расширение для базы данных не найдено',
DB_ERROR_ACCESS_VIOLATION
=> 'Ошибка доступа к таблице или файлу базы данных',
DB_ERROR_NOSUCHDB => 'Попытка доступа к несуществующей базе данных',
DB_ERROR_CONSTRAINT_NOT_NULL
=> 'Поле таблицы базы данных не может содержать значение NULL',
DB_ERROR_MAX_WORD_LENGTH
=> 'Максимальная длина индексируемого слова (max_word_length) должна
быть целым положительным числом',
DB_ERROR_WORDS_TABLE_CREATE
=> 'Не удалось создать таблицу ключевых слов',
DB_ERROR_USERS_KEYS_CREATE
=> 'Не удалось создать таблицу идентификационных ключей пользователей',
DB_ERROR_KEY_CREATE => 'Не удалось создать ключ для пользователя',
DB_ERROR_WORDS => 'Недопустимый или пустой список слов',
DB_OK => 'Ошибок нет',
);
if(DB::isError($value))
$value = $value->getCode();
return isset($messages[$value]) ? $messages[$value] : $messages[DB_ERROR];
}
static public function parseDSN($dsn)
{
$parsed = array(
'phptype' => false,
'dbsyntax' => false,
'username' => false,
'password' => false,
'protocol' => false,
'hostspec' => false,
'port' => false,
'socket' => false,
'database' => false,
);
if(is_array($dsn))
{
$dsn = array_merge($parsed, $dsn);
if(!$dsn['dbsyntax'])
{
$dsn['dbsyntax'] = $dsn['phptype'];
}
return $dsn;
}
// phptype и dbsyntax
if(($pos = strpos($dsn, '://')) !== false)
{
$str = substr($dsn, 0, $pos);
$dsn = substr($dsn, $pos + 3);
}
else
{
$str = $dsn;
$dsn = null;
}
if(preg_match('|^(.+?)\((.*?)\)$|', $str, $arr))
{
$parsed['phptype'] = $arr[1];
$parsed['dbsyntax'] = !$arr[2] ? $arr[1] : $arr[2];
}
else
{
$parsed['phptype'] = $str;
$parsed['dbsyntax'] = $str;
}
if(!count($dsn))
{
return $parsed;
}
// username и password
if(($at = strrpos($dsn, '@')) !== false)
{
$str = substr($dsn, 0, $at);
$dsn = substr($dsn, $at + 1);
if(($pos = strpos($str, ':')) !== false)
{
$parsed['username'] = rawurldecode(substr($str, 0, $pos));
$parsed['password'] = rawurldecode(substr($str, $pos + 1));
}
else
{
$parsed['username'] = rawurldecode($str);
}
}
// protocol и hostspec
if(preg_match('|^([^(]+)\((.*?)\)/?(.*?)$|', $dsn, $match))
{
$proto = $match[1];
$proto_opts = $match[2] ? $match[2] : false;
$dsn = $match[3];
}
else
{
if(strpos($dsn, '+') !== false)
list($proto, $dsn) = explode('+', $dsn, 2);
if(strpos($dsn, '/') !== false)
list($proto_opts, $dsn) = explode('/', $dsn, 2);
else
{
$proto_opts = $dsn;
$dsn = null;
}
}
$parsed['protocol'] = (!empty($proto)) ? $proto : 'tcp';
$proto_opts = rawurldecode($proto_opts);
if(strpos($proto_opts, ':') !== false)
list($proto_opts, $parsed['port']) = explode(':', $proto_opts);
if($parsed['protocol'] == 'tcp')
$parsed['hostspec'] = $proto_opts;
elseif($parsed['protocol'] == 'unix')
$parsed['socket'] = $proto_opts;
// database
if($dsn)
{
if(($pos = strpos($dsn, '?')) === false)
$parsed['database'] = rawurldecode($dsn);
else
{
$parsed['database'] = rawurldecode(substr($dsn, 0, $pos));
$dsn = substr($dsn, $pos + 1);
$opts = (strpos($dsn, '&') !== false) ?
explode('&', $dsn) : array($dsn);
foreach($opts as $opt)
{
list($key, $value) = explode('=', $opt);
if(!isset($parsed[$key]))
$parsed[$key] = rawurldecode($value);
}
}
}
return $parsed;
}
function getDSNString($dsn, $hidePassword)
{
$dsnArray = DB::parseDSN($dsn);
if($hidePassword)
{
$dsnArray['password'] = 'PASSWORD';
}
if(is_string($dsn) && strpos($dsn, 'tcp') === false
&& $dsnArray['protocol'] == 'tcp')
{
$dsnArray['protocol'] = false;
}
$dsnString = $dsnArray['phptype'];
if($dsnArray['dbsyntax'])
{
$dsnString .= '(' . $dsnArray['dbsyntax'] . ')';
}
$dsnString .= '://'
. $dsnArray['username']
. ':'
. $dsnArray['password']
. '@'
. $dsnArray['protocol'];
if($dsnArray['socket'])
{
$dsnString .= '(' . $dsnArray['socket'] . ')';
}
if($dsnArray['protocol'] && $dsnArray['hostspec'])
{
$dsnString .= '+';
}
$dsnString .= $dsnArray['hostspec'];
if($dsnArray['port'])
{
$dsnString .= ':' . $dsnArray['port'];
}
$dsnString .= '/' . $dsnArray['database'];
unset($dsnArray['phptype'], $dsnArray['dbsyntax'], $dsnArray['username'], $dsnArray['password'], $dsnArray['protocol'], $dsnArray['socket'], $dsnArray['hostspec'], $dsnArray['port'], $dsnArray['database']
);
if(count($dsnArray) > 0)
{
$dsnString .= '?';
$i = 0;
foreach($dsnArray as $key => $value)
{
if(++$i > 1)
{
$dsnString .= '&';
}
$dsnString .= $key . '=' . $value;
}
}
return $dsnString;
}
}
class DB_Error
{
var $error_message_prefix = '';
var $mode = DB_ERROR_RETURN;
var $level = E_USER_NOTICE;
var $code = -1;
var $message = '';
var $userinfo = '';
var $backtrace = null;
public function DB_Error($message = 'unknown error', $code = null, $mode = null,
$options = null, $userinfo = null)
{
if($mode === null)
$mode = DB_ERROR_RETURN;
$this->message = $message;
$this->code = $code;
$this->mode = $mode;
$this->userinfo = $userinfo;
if(DB_ZE2)
$skiptrace = DB5::getStaticProperty('DB_Error', 'skiptrace');
else
$skiptrace = DB::getStaticProperty('DB_Error', 'skiptrace');
if(!$skiptrace)
{
$this->backtrace = debug_backtrace();
if(isset($this->backtrace[0]) && isset($this->backtrace[0]['object']))
{
unset($this->backtrace[0]['object']);
}
}
if($mode & DB_ERROR_CALLBACK)
{
$this->level = E_USER_NOTICE;
$this->callback = $options;
}
else
{
if($options === null)
{
$options = E_USER_NOTICE;
}
$this->level = $options;
$this->callback = null;
}
if($this->mode & DB_ERROR_PRINT)
{
$format = (is_null($options) || is_int($options)) ? "%s" : $options;
printf($format, $this->getMessage());
}
if($this->mode & DB_ERROR_TRIGGER)
{
trigger_error($this->getMessage(), $this->level);
}
if($this->mode & DB_ERROR_DIE)
{
$msg = $this->getMessage();
if(is_null($options) || is_int($options))
{
$format = "%s";
if(substr($msg, -1) != "\n")
{
$msg .= "\n";
}
}
else
{
$format = $options;
}
die(sprintf($format, $msg));
}
if($this->mode & DB_ERROR_CALLBACK && is_callable($this->callback))
{
call_user_func($this->callback, $this);
}
if($this->mode & DB_ERROR_EXCEPTION)
{
eval('$e = new Exception($this->message, $this->code);throw($e);');
}
}
public function getMode()
{
return $this->mode;
}
public function getCallback()
{
return $this->callback;
}
public function getMessage()
{
return ($this->error_message_prefix . $this->message);
}
public function getCode()
{
return $this->code;
}
public function getType()
{
return get_class($this);
}
public function getUserInfo()
{
return $this->userinfo;
}
public function getDebugInfo()
{
return $this->getUserInfo();
}
public function addUserInfo($info)