Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Mysqli::stmt - Подготовленные выражения 
:(
    Опции темы
Gold Dragon
Дата 30.10.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



ksnk, а вот впихнуть кэширование в инициализацию - мысль очень даже интересная. Можно что угодно докручивать кстати. Вот только ...

Цитата(ksnk @  30.10.2012,  08:45 Найти цитируемый пост)
и  макры типа ?d, ?#, ?a . 
да, идея интересная, но с другой стороны, а не излишняя?

Цитата(ksnk @  30.10.2012,  10:12 Найти цитируемый пост)
Придумалось, что новый огород городить смысла нет, можно воспользоваться "шаблонными" идеями.
вникал, вникал, вникнул.. по моему перебор кажется smile усложняешь

Цитата(ksnk @  30.10.2012,  14:36 Найти цитируемый пост)
Писано за пару часов, так что не обессудьте. Но вдруг кого заинтересует...
Точно за пару??? Час сижу и не могу мыси собрать во едино... smile наверное вечер... Попробую завтра ещё осмыслить.. а может просто реальных примеров не хватает



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 30.10.2012, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Цитата(Gold Dragon @  30.10.2012,  18:38 Найти цитируемый пост)
Точно за пару??? Час сижу и не могу мыси собрать во едино...

30.10.2012, 09:12 - первый пост, начало мысли, а в 30.10.2012, 13:36 уже проект на гитхабе. Не пара, конечно, но все равно довольно быстро.  Ну и допиливал понемногу  в течении дня.

Сейчас, кстати, он сравнивается с pdo и не особенно значительно проигрывает в скорости. По большому счету - можно пренебречь...
А в удобстве, imho, будет превосходить.
 
Цитата(Gold Dragon @  30.10.2012,  18:38 Найти цитируемый пост)
а может просто реальных примеров не хватает

Там в test/spl_templaterTest.php есть немножко примеров традиционных запросов. Это части phpUnit, но понять что и как исользуется - можно.
Код

        $func = $sql->parse('SELECT name FROM tbl WHERE id IN({{?|join(\',\')}})');
        $this->assertEquals("SELECT name FROM tbl WHERE id IN(1,101,303)", $func(
            array(1, 101, 303)));


Код

$sql->setval('prefix','mixnfix') ;
        $func = $sql->parse('SELECT * FROM {{prefix}}_user LIMIT 10 ');
        $this->assertEquals("SELECT * FROM mixnfix_user LIMIT 10 ", $func(
            array('one' => 'one_value', 'two' => 'two_value')));


Код

$func = $sql->parse('insert into xxx set {{?|pair}} ;');
        $this->assertEquals("insert into xxx set `one`=\"one_value\",`two`=\"two_value\" ;", $func(
            array('one' => 'one_value', 'two' => 'two_value')));


Код

$func = $sql->parse('insert into xxx ({{?|keys|join(",")}}) values ({{?1|values|join(",")}}) ;');
        $this->assertEquals("insert into xxx ('one','two') values ('one_value','two_value') ;", $func(
            array('one' => 'one_value', 'two' => 'two_value')));


Код

$func = $sql->parse('select * from index where {{?|int}}<`field`;');

        $this->assertEquals("select * from index where 25<`field`;", $func(25));



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 30.10.2012, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



ты фанат шаблонов smile и чувствую вошёл в азарт.... сегодня уже не способен осознать.  Завтра резюмирую свой класс и выкладываю на GIT... и буду осознавать...


ksnk, а не получится так что к твоему творчеству придётся справочник писать? Ты практически новый язык придумал


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 31.10.2012, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Цитата(Gold Dragon @  30.10.2012,  21:35 Найти цитируемый пост)
Ты практически новый язык придумал 

Синтаксис от Твига. Точнее от Django-template. Так что если есть опыт использования таких темплейтов - нет ничего сложного, просто пару новых слов запомнить ;) Несколько непривычно для twig'а используется знак вопросика, но это остаточек от традиционного sql-плейсхолдинга, вроде должно быть относительно привычно.
Вот насчет условных операторов сложнее, если их использовать, то оттранслировать это с помощью только строковых операций уже не удастся, получится тяжелее и дольше по времени трансляции. Хотя IF'ы, в принципе, не помешали бы. Да и циклам нашлось бы применение для монтажа простыней из insert values... Впрочем, обойдусь, пока. ;)

Пока я попробую наладить и потестировать систему перехвата ошибок трансляции, она там пока просто никакая.

А вообще-то получилось забавно, и вроде, вполне работоспособно...  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 31.10.2012, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



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

$this->db_resource = new mysqli(
          _config('db_host'), 
          _config('db_user'), 
          _config('db_password'), 
          _config('db_name'), 
          _config('db_port'), 
          _config('db_socket')
);


знаний не хватает.  Вылетает варнинг по типу
Цитата

...mysqli::mysqli(): (HY000/145)......


А нужно чтобы всё грамотно было типа так
Код

throw new Exception(_EXC_ERROR_CREATING_MYSQLI);


Это сообщение отредактировал(а) Gold Dragon - 31.10.2012, 07:32


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 31.10.2012, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



А что перехватывать-то надо? Неправильные параметры в _config? или проблемы с созданием объекта mysqli? Вроде в php.net про это какие-то примеры есть. не подойдет?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 31.10.2012, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Цитата(ksnk @  31.10.2012,  12:26 Найти цитируемый пост)
А что перехватывать-то надо? Неправильные параметры в _config? 
Ну да, если ошибка в пароле, пользователе, названии базы....

Т.е. не чтобы ошибка вылетала, а именно исключение


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ksnk
Дата 31.10.2012, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



Код

<?php

class foo_mysqli extends mysqli {
    public function __construct($host, $user, $pass, $db) {
        parent::__construct($host, $user, $pass, $db);

        if (mysqli_connect_error()) {
            die('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
    }
}

$db = new foo_mysqli('localhost', 'my_user', 'my_password', 'my_db');

echo 'Success... ' . $db->host_info . "\n";

$db->close();
?>

вот, довольно кошерный пример по моей ссылке. Там еще есть разной степени применимости.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 31.10.2012, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(Gold Dragon @  31.10.2012,  07:31 Найти цитируемый пост)
А нужно чтобы всё грамотно было типа так
throw new Exception(_EXC_ERROR_CREATING_MYSQLI);

Код

mysqli_report (MYSQLI_REPORT_STRICT);
try {
  $this->db_resource = new mysqli(
          _config('db_host'), 
          _config('db_user'), 
          _config('db_password'), 
          _config('db_name'), 
          _config('db_port'), 
          _config('db_socket')
  );
} catch (mysqli_sql_exception $ex) {
  echo $ex->getMessage();
}

PM MAIL   Вверх
Gold Dragon
Дата 31.10.2012, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



baldina, а разве несколько раз можно объявлять подобную конструкцию? Просто у меня это класс  уже в этой констукции.... т.е. в index.php

Добавлено через 4 минуты и 34 секунды
ksnk, что-то как-то не то... В том то и дело что всё остальное отлично ловит исключения, и даже после new, но вот если ошибка в new, то выдаёт и ошибку и исключение на connect_error друг за другом

Это сообщение отредактировал(а) Gold Dragon - 31.10.2012, 20:34


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
baldina
Дата 1.11.2012, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 2
Всего: 101



Цитата(Gold Dragon @  31.10.2012,  20:34 Найти цитируемый пост)
а разве несколько раз можно объявлять подобную конструкцию?

какую именно?

Добавлено через 3 минуты и 40 секунд
если try...catch, то сколько угодно. поймается исключение там, где первый блок catch соответствует по типу.
но вообще стратегию ловли исключений продумывать надо, это же часть архитектуры.
исключения хороши там, где требуется обработать ошибку не на том уровне, где она возникла, плюс управлять обработкой: не нужно тащить вверх коды ошибок, не нужно лишних if

Добавлено через 7 минут и 33 секунды
вообще, как я понял, проблема была не в обработке исключений, а что они не генерятся. решение - mysqli_report (MYSQLI_REPORT_STRICT);
PM MAIL   Вверх
Gold Dragon
Дата 5.11.2012, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Так, всё закачал на GitHub
https://github.com/GoDr/GDLDatabase

Попытался всё здраво описать... (wiki пока не создавал)

в файле index.php приведены все примеры

Вот описание всех методов


Дамп тестовой таблицы

Код

CREATE DATABASE IF NOT EXISTS `dbase`;
USE `dbase`;

CREATE TABLE IF NOT EXISTS `table` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `name` varchar(50) DEFAULT '0',
    `date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

INSERT INTO `table` (`id`, `name`, `date`) VALUES
    (1, 'Иван', '2012-11-04'),
    (2, 'Степан', '2012-11-06'),
    (3, 'Пётр', '2012-11-07');


select() - Вывод всех значений
Цитата


Пример:
$result = GDLDatabase::Init()->select("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", 1, 'Степан');
или
$result = GDLDatabase::Init()->select("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", array(1, 'Степан'));

Результат:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Иван
            [date] => 2012-11-04
        )

    [1] => Array
        (
            [id] => 2
            [name] => Степан
            [date] => 2012-11-06
        )

)


selectRow() - Вывод первой строки
Цитата


Пример:
$result = GDLDatabase::Init()->selectRow("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", 1, 'Степан');
или
$result = GDLDatabase::Init()->selectRow("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", array(1, 'Степан'));

Результат:

Array
(
    [id] => 1
    [name] => Иван
    [date] => 2012-11-04
)


selectCol() - Вывод первого столбца запроса
Цитата


Пример:
$result = GDLDatabase::Init()->selectCol("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", 1, 'Степан');
или
$result = GDLDatabase::Init()->selectCol("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", array(1, 'Степан'));

Результат:

Array
(
    [0] => 1
    [1] => 2
)


selectCell() - Вывод первой ячейки первого столбца запроса
Цитата


Пример:
$result = GDLDatabase::Init()->selectCell("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", 1, 'Степан');
или
$result = GDLDatabase::Init()->selectCell("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", array(1, 'Степан'));

Результат:

1


update() - Обновление записи
Цитата


Пример:
$result = GDLDatabase::Init()->update("UPDATE `#__table` SET `date`=? WHERE `id`=? AND `name`=?", array('2012-11-07', 3, 'Пётр'));
или
$result = GDLDatabase::Init()->update("UPDATE `#__table` SET `date`=? WHERE `id`=? AND `name`=?", '2012-11-07', 3, 'Пётр');


insert() - Вставка записи
Цитата


Пример:
$result = GDLDatabase::Init()->insert("INSERT INTO `#__table` (`id`, `name`, `date`) VALUES (?, ?, ?);", array(4, 'Антон', '2012-11-07'));
или
$result = GDLDatabase::Init()->insert("INSERT INTO `#__table` (`id`, `name`, `date`) VALUES (?, ?, ?);", 4, 'Антон', '2012-11-07');


replace() - Перезапись записи
Цитата


Пример:
$result = GDLDatabase::Init()->replace("REPLAСE INTO `#__table` (`id`, `name`, `date`) VALUES (?, ?, ?);", array(4, 'Антон', '2012-11-07'));
или
$result = GDLDatabase::Init()->replace("REPLAСE INTO `#__table` (`id`, `name`, `date`) VALUES (?, ?, ?);", 4, 'Антон', '2012-11-07');


delete() - Удаление записи
Цитата


Пример:
$result = GDLDatabase::Init()->delete("DELETE FROM `#__table` WHERE `id`=? AND `name`=?", array(4, 'Антон'));
или
$result = GDLDatabase::Init()->delete("DELETE FROM `#__table` WHERE `id`=? AND `name`=?", 4, 'Антон');


getCacheSql() - Вывод всех значений (метод selectRow) при использовании кэширования
Цитата


Пример:
$result = GDLDatabase::Init()->getCacheSql("selectRow", "SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", 1, 'Степан');
или
$result = GDLDatabase::Init()->getCacheSql("selectRow", "SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", array(1, 'Степан'));

Результат:

Array
(
    [id] => 1
    [name] => Иван
    [date] => 2012-11-04
)


Транзакция
Цитата

Использование транзакции:

$db=GDLDatabase::Init();
$db->transactionStart();
$db->insert('INSERT INTO `#__table` set testval =?',20);
$db->insert('INSERT INTO `#__table` set testval =?',10);
$db->insert('INSERT INTO `#__table` set testval =?',123);
$db->transactionCommit();

Откат текущей транзакции:

$db=GDLDatabase::Init();
$db->transactionStart();
$db->insert('INSERT INTO `#__table` set testval =?',20);
$db->insert('INSERT INTO `#__table` set testval =?',10);
$db->insert('INSERT INTO `#__table` set testval =?',123);
$db->transactionRollBack();
$db->transactionCommit();


simpleQuery() - Простое выполнение запроса
Цитата


Пример:
$result = GDLDatabase::Init()->simpleQuery("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`=? OR `name`=?", 1, 'Степан');

Результат:

mysqli_result Object
(
    [current_field] => 0
    [field_count] => 3
    [lengths] => 
    [num_rows] => 2
    [type] => 0
)


getQueryInfo() - Получение дополнительной информации о последнем запросе
Цитата


Пример:
GDLDatabase::Init()->insert("INSERT INTO `#__table` (`name`, `date`) VALUES (?, ?);", array('Елена', '2012-10-07'));
$result1 = GDLDatabase::Init()->getQueryInfo();

GDLDatabase::Init()->select("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id`>?, 6);
$result2 = GDLDatabase::Init()->getQueryInfo();

Результат:

Array
(
    [affected_rows] => 1
    [insert_id] => 15
    [num_rows] => 0
    [field_count] => 0
    [sqlstate] => 00000
)
Array
(
    [affected_rows] => 3
    [insert_id] => 0
    [num_rows] => 3
    [field_count] => 3
    [sqlstate] => 00000
)


getError() - Описание ошибки последнего запроса
Цитата


Пример:
GDLDatabase::Init()->select("SELECT `id`, `names`, `date` FROM `#__table` WHERE `id`>?", 6);
$result = GDLDatabase::Init()->getError();

Результат:

Unknown column 'names' in 'field list'


getErrno() - Описание номера ошибки последнего запроса
Цитата


Пример:
GDLDatabase::Init()->select("SELECT `id`, `names`, `date` FROM `#__table` WHERE `id`>?", 6);
$result = GDLDatabase::Init()->getErrno();

Результат:

1054


showProfiles() - Показать профилирование запросов
Цитата


Пример:
GDLDatabase::Init()->select("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id` >= ?", 3);
GDLDatabase::Init()->select("SELECT `id`, `name`, `date` FROM `#__table` WHERE `id` < ?", 3);
$result = GDLDatabase::Init()->showProfiles();

Результат:

Array
(
    [0] => Array
        (
            [0] => 12
            [1] => 0.00015675
            [2] => SELECT `id`, `name`, `date` FROM `table` WHERE `id` >= ?
        )

    [1] => Array
        (
            [0] => 13
            [1] => 0.00013650
            [2] => SELECT `id`, `name`, `date` FROM `table` WHERE `id` < ?
        )

)


getObject() - Возвращает обьект класса mysqli для нереализованных операций
Цитата


Пример:
$result = GDLDatabase::Init()->getObject();

Результат:

mysqli Object
(
    [affected_rows] => 13
    [client_info] => mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $
    [client_version] => 50010
    [connect_errno] => 0
    [connect_error] => 
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )

    [field_count] => 3
    [host_info] => localhost via TCP/IP
    [info] => 
    [insert_id] => 0
    [server_info] => 5.1.65-community-log
    [server_version] => 50165
    [stat] => Uptime: 27891  Threads: 1  Questions: 2722  Slow queries: 0  Opens: 148  Flush tables: 1  Open tables: 1  Queries per second avg: 0.97
    [sqlstate] => 00000
    [protocol_version] => 10
    [thread_id] => 187
    [warning_count] => 0
)



Добавлено через 6 минут и 19 секунд
Жду обсуждений по этому классу... 

Это сообщение отредактировал(а) Gold Dragon - 5.11.2012, 16:23


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 11.11.2012, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



Чуть изменил метод getQueryInfo(). Теперь может выводит как ассоциативный массив с дополнительной информацией, так и значение конкретного ключа если передать имя ключа

Например:
Код

$id = GDLDatabase::Init()->getQueryInfo('insert_id');



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Fortop
Дата 11.11.2012, 21:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 3
Всего: 42





--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Gold Dragon
Дата 12.11.2012, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 2
Всего: 71



нет конечно. И я как-то говорил что мне не нужен супер-монстр, а нужен маленький монстрёнок  smile 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Страницы: (6) Все « Первая ... 2 3 [4] 5 6 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1248 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.