[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверка указателя соединения
jackDaniels
Требуется присвоить переменной указатель соединения с БД (resource),
Свернутый текст
который можно получить с помощью mysql_connect(),

но предварительно проверить валидность этого указателя.
На ум приходит только выполнить какой-то простой левый запрос, но возникает два вопроса:
1) Какой запрос будет универсальным (для разных прав, серверов, etc.) и минимум ресурсоемкий?
2) Можно ли все-таки как-то без лишних запросов?



Спустя 2 минуты, 21 секунда (15.02.2011 - 10:10) Snus написал(а):
jackDaniels
Мне интересно, только я не понял, что ты имеешь ввиду или есть еще кто-то.

Спустя 11 минут, 6 секунд (15.02.2011 - 10:21) Michael написал(а):
Цитата (jackDaniels)
но предварительно проверить валидность этого указателя.


mysql_connect

Цитата
Returns a MySQL link identifier on success, or FALSE on failure.


if ($connect) {
// присваиваем
}

Спустя 5 минут, 52 секунды (15.02.2011 - 10:27) jackDaniels написал(а):

<?
class
DB
{
private $Handle;

public function SetHandle($handle)
{
if (/* проверка валидности указателя и наличия выбранной базы данных, это и есть вопрос, как реализовать? */)
{
$this->Handle = $handle;
return true;
}
else
return
false;
}
}


$DB = new DB();

$handle = mysql_connect('localhost', 'root', '123456');
mysql_select_db('apples', $handle);

var_dump($DB->SetHandle($handle));

?>


Необходимо избежать передачи в аргументе уже закрытых соединений и вообще любых инородных данных ('banana', 563.01212, array(), etc.).

Спустя 27 минут, 2 секунды (15.02.2011 - 10:54) linker написал(а):
if (!is_resource($this->Handle))
{
}

else
{
}

Спустя 27 минут, 18 секунд (15.02.2011 - 11:21) jackDaniels написал(а):
Цитата (linker @ 15.02.2011 - 07:54)
if (!is_resource($this->Handle))
{
}

else
{
}

Сначала так и написал, но подумал, что тип resource вовсе не означает, что все корректно.
Например, если БД не была выбрана, то тип resource будет иметь место, но данным условиям не будет удовлетворять.

Спустя 33 минуты, 45 секунд (15.02.2011 - 11:55) linker написал(а):
Выбор БД и ресурс подлючения к мускулу - это разные вещи. БД можно вообще не выбирать, главное коннект.

Спустя 8 минут, 58 секунд (15.02.2011 - 12:04) jackDaniels написал(а):
Цитата (linker @ 15.02.2011 - 08:55)
Выбор БД и ресурс подлючения к мускулу - это разные вещи. БД можно вообще не выбирать, главное коннект.

Я абсолютно согласен, но просто в моем случае требуется, чтобы нельзя было задать указатель, если не выбрана база. Т.е. в $DB->Handle должен попадать указатель с выбранной базой, полностью готовый для типичных запросов в духе SELECT, INSERT...
Ну и плюс не каждый resource является именно SQL указателем, а может быть, например, FTP указателем, который также не подойдет.

Спустя 6 минут, 38 секунд (15.02.2011 - 12:10) jetistyum написал(а):
А в каких ситуациях у тебя может произойти подключение без выбора БД? в каких ситуациях туда может попасть что-то инородное, кроме ресурса на подключение ?

Спустя 5 минут, 13 секунд (15.02.2011 - 12:15) linker написал(а):
Понимаешь, нельзя выбрать базу не имея подключения. Работать с Мускулом и выполнять запросы можно даже не выбирая базы данных. Если, тебе очень хочется вот так извратиться костыльно, то как минимум классу нужно сообщить, что ты выбрал базу данных. А по-хорошему нужен синглтон и все подключения и выборки скрыть внутри класса.

Спустя 4 минуты, 26 секунд (15.02.2011 - 12:20) jackDaniels написал(а):
Цитата (jetistyum @ 15.02.2011 - 09:10)
А в каких ситуациях у тебя может произойти подключение без выбора БД? в каких ситуациях туда может попасть что-то инородное, кроме ресурса на подключение ?

Пишу класс для работы с БД, которым буду пользоваться не только я. Один из методов - это, как в примере, выбор указателя. Что туда может по ошибке попасть - зависит от разработчиков.
Дело в том, что если реализовать такую проверку, то не будет необходимости обрабатывать ошибки, связанные с некорректными указателями, т.к. до того, как их задать, они будут проверяться.

Спустя 3 минуты, 33 секунды (15.02.2011 - 12:23) jackDaniels написал(а):
Цитата (linker @ 15.02.2011 - 09:15)
Понимаешь, нельзя выбрать базу не имея подключения. Работать с Мускулом и выполнять запросы можно даже не выбирая базы данных. Если, тебе очень хочется вот так извратиться костыльно, то как минимум классу нужно сообщить, что ты выбрал базу данных. А по-хорошему нужен синглтон и все подключения и выборки скрыть внутри класса.

Я это понимаю.
Требуется: 1. установить подключение + 2. выбрать базу
Вот и все.
Проблема в том, что я не могу влиять на входные данные, а должен лишь определить выполнены ли эти 2 условия или нет.

Спустя 5 минут, 2 секунды (15.02.2011 - 12:28) jetistyum написал(а):
jackDaniels
Ну и ну smile.gif Разработчики это же не дрессированные шимпанзе, думаю ума хватит передавать туда подключение, вместо массива чисел. А еще какие проверки можно придумать, Правильную ли бд выбрал разработчик, составить список правильных запросов, которые можно отправлять к серверу бд, так чтоли?smile.gif
Эти проверки на мой взгляд лишние. К тому же на низком уровне они вероятнее всего обрабатываются, стоит ли строить еще проверки.

Спустя 19 секунд (15.02.2011 - 12:29) linker написал(а):
Еще раз повторю, указатель указывает на соединение с MySQL-сервером, а не на выбранную базу данных. Если предполагается несколько серверов, то is_resource(), если один сервер и несколько баз данных, то указывай классу какая текущая база данных, либо пиши запросы с указанием полного пути к таблицам: `база данных`.`таблица`.`поле`.

Спустя 16 минут, 58 секунд (15.02.2011 - 12:46) jackDaniels написал(а):
Цитата (linker @ 15.02.2011 - 09:29)
Еще раз повторю, указатель указывает на соединение с MySQL-сервером, а не на выбранную базу данных. Если предполагается несколько серверов, то is_resource(), если один сервер и несколько баз данных, то указывай классу какая текущая база данных, либо пиши запросы с указанием полного пути к таблицам: `база данных`.`таблица`.`поле`.

Ну я еще раз повторю тогда, что я это прекрасно понимаю.
Когда я писал "требуется", я имел в виду, что эти условия требуются мне => мне не нужны указатели на сервера, где не выбрана БД - неужели это так сложно понять?

Да, подразумеваются разные сервера, на каждом из которых 1 БД.

$handle = ftp_connect('123.45.67.89');
var_dump(is_resource($handle));

true, но моим условиям этот указатель НЕ удовлетворяет, поэтому такая проверка бессмысленна

jetistyum, я согласен, но тут будет просто более подробная информация об ошибках, и так надо по ТЗ.

Подскажите тогда, пожалуйста, какой-то простой универсальный не ресурсоемкий SQL запрос, о котором я в 1-ом посте говорил.

Спустя 7 минут, 46 секунд (15.02.2011 - 12:54) jetistyum написал(а):
Из какой страны планируете брать программистов smile.gif ?
Ну это смешно, чесслово

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

Спустя 3 минуты, 7 секунд (15.02.2011 - 12:57) jetistyum написал(а):
Но тебе нужно будет проверять, является ли строкой запрос, который послан в базу данных, и это убережет тебя от 0.0001% ошибок при работе с бд.
Можно взяться за написание парсера языка SQL, чтобы определить, нет ли ошибок в запросе. Конечно он должен проверять версию MySQL сервера, и желательно подсказывать какую букву заменить на какую, чтобы все заработало smile.gif
И в итоге это все должно вылиться в одну функцию -
СделатьОхрененно();
и без параметров, чтобы не дай бог что-то не то не передали smile.gif

Спустя 42 минуты, 39 секунд (15.02.2011 - 13:39) linker написал(а):
Ты пишешь класс для программистов или даунов?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.