Создание блога на PHP. Урок 2. Логирование на сайте. Язык SQL.

    Создание блога на PHP. Урок 2. Логирование на сайте. Язык SQL.

    Цикл материалов «Создание блога на PHP»

    Сегодня мы плавно перейдём от теории к практике. Первым делом мы реализуем логирование в нашем блоге, рассмотрим простейшие SQL запросы и научимся с ними работать из PHP.

    Отладка и логирование в CMS

    Отладочная информацияОтладочная информация – информация, помогающая в отладке.

    Часто приходится проанализировать внезапно возникшую ошибку или устроить «разбор полётов» серьёзного бага. Инструменты ведения логов будут полезны как и при разработке сайта, так и при разборе полётов.

    ЛоггированиеЛоггирование или журналирование – процесс ведения пошагового лога (журнала) отладочной информации.

    Кроме общего лога ошибок PHP необходимо логировать действия и промежуточные результаты выполнения програмы. Для этого в CMS используются различные. У нас схема классов приблизительно следующая:

    Структура классов логирования

    BLogger – абстрактный класс-родитель. В нём прописаны 2 основных абстрактных функции:

    1. public function addtolog($msg,$level=LL_GENERAL);
    2. public function addHR();

    addtolog добавляет сообщение, addHR – горизонтальную линию.

    BLog – общий класс, который управляет логгерами – регистрирует их, отправляет им сообщения и прочее. Мы же им и будем пользоваться в логгировании нашей работы (в библиотеках и компонентах мы все наши отладочные сообщения передаём в BLog). Все функции BLog статические. Если у нас не зарегистрировано ни одного логгера – все логи игнорируются.

    Примеры использования:

    • В режиме отладки мы подключаем BLoggerHTML и BLoggerFile. Лог выводится в футере сайта и параллельно складывается в папочку.
    • На рабочем проекте мы можем подключить логгер BLoggerFile, который будет вести логи в папочке на сервере для разбора полётов.
    • При наличии скриптов, которые запускаются в консоли или по CRONу – мы регистрируем логгер BLoggerConsole, который запросы выводит в консоль.
    • Если наш сайт работает в кластере – мы можем создать систему логгирования каждой ноды, просто унаследовав BLoggerNode от BLogger и прописав там работу с логами.

    Всё предельно просто и удобно.

    База данных в блоге. Для чего нужна база данных?

    База данных в блоге

    Много сайтов (а особенно блогов) работают не статично – на сайте приходится добавлять и обновлять информацию, постоянно пишутся комментарии, регистрируются пользователи. Всю это информацию приходится где-то хранить.

    Обычно в PHP для хранения данных:

    1. Реляционные базы данных (обычно это SQL);
    2. Файлы (да, и такое встречается);
    3. Базы данных Key=>Value (их ещё в народе называют NoSQL).

    Работа с данными, сортировка, лимиты.

    БД – это

    СУБД – это

    Реляционная БД.

    Слово «реляционный» происходит от англ. relation («отношение», «зависимость», «связь»).

    FoxPro, DB2, MicrosoftAccess

    Что такое SQL?

    SQL – это язык запросов. На языке SQL построено множество СУБД – MySQL, MS SQL, PostgreSQL, Oracle и много других. У каждого из них есть свои нюансы в работе, но их объединяет общий язык. Обычно СУБД работает на клиент-серверной модели. Т.е. к одной базе данных подключается много клиентов и все они, без каких-либо конфликтов, могут пользоваться базой.

    Как я уже выше сказал, .

    Таблицы

    Вся информация в SQL базе данных.

    Строки называют записями

    У каждого столбца есть свой определённый тип. Если created – DATETIME, то там можно хранить только дату / время.

    Столбец может допускать или не допускать значения NULL, ограничивать размер.

    Пример:

    id email password name created
    1 admin@google.com admin0000 Администратор 2015-01-12 00:12:23
    2 vasya@mail.ru Vasya123 Вася 2012-07-11 23:11:05
    3 test@brilliant.ua pWt@s1Lq Тест 2013-04-29 12:02:34
    4 a@konservs.com gHckOlx2 Андрей 2011-12-03 17:12:12

    Команда SELECT

    Для выбора данных.

    SELECT name, text, created FROM content_articles WHERE (category=5) ORDER BY `created` LIMIT 5 OFFSET 10

    Давайте разберём запрос детальнее:

    SELECT Ключевое слово которое сообщает базе данных что мы хотим выбрать данные.
    name, text, created Список столбцов из таблицы которые выбираются запросом. Если мы хотим выбрать все поля, можно использовать символ «*».
    FROM content_articles FROM – ключевое слово, которое должно быть представлено в каждом запросе выборки. После него идёт пробел и затем имя таблицы.
    WHERE (category=5) WHERE – необязательное ключевое слово, которое указывает на условия фильтрации данных. Условия могут быть достаточно сложными.
    ORDER BY `created` ORDER BY – необязательное ключевое слово, указывающее на столбцы сортировки
    LIMIT 5 LIMIT – необязательное ключевое слово
    OFFSET 10 OFFSET – необязательное ключевое слово
    ; Точка с запятой – индикатор окончания команды.

    Я описал команду SELECT в общих чертах, если будет необходима детальная информация – пользуйтесь документацией SQL.

    Команда INSERT

    INSERT INTO users (email, password, name, created) VALUES (“test@google.com”,”test”,”google test”,NOW()) INSERT INTO users (email, password, name, created) VALUES (“test@google.com”,”test”,”google test”,NOW()) Результатом

    Команда UPDATE

    Команда служит для обновления, в упрощённом виде выглядит следующим образом:

    UPDATE users SET name=””, password=”” WHERE (id=2);

    Команда DELETE

    Команда служит для удаления записи, в упрощённом виде выглядит следующим образом:

    DELETE FROM users WHERE (id=2)

    Что ещё?

    Мы не рассмотрели:

    • Типы данных SQL
    • Агрегатные функции
    • Объединение таблиц
    • Вложенные запросы
    • Создание таблиц
    • Ключи
    • Триггеры
    • Хранимые процедуры
    Поскольку акценты наших уроков больше на PHP, сложные структуры MySQL мы оставляем на будущее.

    Класс для работы с MySQL (Singleton)

    Чего мы хотим от класса: 1. Выполнять запросы 2. Уметь соединятся с сервером 3. Вести статистику Для связи с MySQL сервером есть 3 варианта библиотек PHP – php_mysql, php_mysqli и php_pdo.

    Свойства класса

    Следующие свойства:

    1. protected $db_connected; //Указывает на состояние соединения с сервером
    2. protected $mysqli; //экземпляр класса библиотеки php_mysqli
    3. protected $logsuffix; //суффикс для лога (в случае нескольких БД)
    4. public $queries_count=0; //количество запросов к базе данных
    5. public $db_host; //Хост сервера MySQL
    6. public $db_username;
    7. public $db_password;
    8. public $db_name;

    Метод TryConnect

    Данный метод используется для

    1. public function TryConnect(){
    2. 	if($this->db_connected){
    3. 		return TRUE;
    4. 		}
    5. 	if(!class_exists('mysqli')){
    6. 		BLog::addtolog($this->logsuffix.
    7. 			': MySQLi class not found',LL_ERROR);
    8. 		return FALSE;
    9. 		}
    10. 	$this->mysqli=new mysqli($this->db_host, 
    11. 		$this->db_username,
    12. 		$this->db_password,
    13. 		$this->db_name,
    14. 		$this->db_port);
    15. 	if((empty($this->mysqli))||(mysqli_connect_errno())){
    16. 		BLog::addtolog($this->logsuffix.
    17. 			': '.mysqli_connect_error(),LL_ERROR);
    18. 		return FALSE;
    19. 		}
    20. 	if(!$this->mysqli->set_charset("utf8"))return FALSE;
    21. 	$this->db_connected=TRUE;
    22. 	return TRUE;
    23. 	}

    Метод getInstanceAndConnect

    Данный метод используется для

    1. public static function getInstanceAndConnect(){
    2. 	if(!is_object(self::getInstance()))return NULL;
    3. 	if(!self::$instance->TryConnect())return NULL;
    4. 	return self::$instance;
    5. 	}

    Метод Query

    1. public function Query($sql){
    2. 	BLog::addtolog($this->logsuffix.' Query: '.$sql);
    3. 	$this->queries_count++;
    4. 	$r=$this->mysqli->query($sql);
    5. 	if((DEBUG_MODE)&&(empty($r))){
    6. 		BLog::addtolog($this->logsuffix.
    7. 			' query failed!',LL_ERROR);
    8. 		BLog::addtolog($this->logsuffix.
    9. 			' query="'.$sql.'";',LL_ERROR);
    10. 		BLog::addtolog($this->logsuffix.
    11. 			' query error='.$this->lasterror(),LL_ERROR);
    12. 		}
    13. 	return $r;
    14. 	}

    Используем логгирование.

    Метод escape_string

    Для предотвращения SQL-инъекций.

    1. public function escape_string($s, $EMPTY_NULL=false){
    2. 	if(!is_string($s)){
    3. 		$s='';
    4. 		}
    5. 	if(($EMPTY_NULL)&&(empty($s))){
    6. 		return 'NULL';
    7. 		}
    8. 	return '"'.$this->mysqli->real_escape_string($s).'"';
    9. 	}

    Метод escape_datetime

    1. public function escape_datetime($dt, $EMPTY_NULL=true){
    2. 	if(($EMPTY_NULL)&&(empty($dt))){
    3. 		return 'NULL';
    4. 		}
    5. 	$str='"'.$dt->format('Y-m-d H:i:s').'"';
    6. 	return $str;
    7. 	}

    Остальные методы

    1. real_query – для
    2. multi_query –
    3. fetch
    4. lasterror
    5. QueryAndFetch
    6. affected_rows
    7. insert_id
    8. start_transaction
    9. commit
    10. rollback

    Использование класса

    1. $sql=BMySQL::getInstanceAndConnect();
    2. If(empty($sql)){
    3. 	return false;
    4. 	}
    5. $sql->query(‘INSERT INTO `users` (`email`,`password`,`created`) VALUES (“admin@google.com”,”admin”,NOW()));

    ДЗ, тема следующего урока, проверка ДЗ

    ДЗ – написать простейшие выборки, составить.

    Тема следующего урока – фабрика, кеширование (memcached, файлы). Синглетон для кеширования. Фабрика для нашего блога. Улучшаем выборку данных из таблицы (добавляем кеширование).

    Оглавление уроков

    Ну, и напоследок, краткое оглавление уроков:

    Поздравляю всех, кто осилил такой большой урок. До встречи!

    Комментарии

    04.06.2019 05:39:37
    Avatar of PatrickloPPatrickloP
    http://mysite.ru - http://mysite.ru
    08.07.2019 06:05:13
    Avatar of ocelisabepokocelisabepok
    http://mewkid.net/buy-amoxicillin/ - Amoxicillin Online <a href="http://mewkid.net/buy-amoxicillin/">Buy Amoxicillin Online</a> cla.aofi.konservs.com.evt.qu http://mewkid.net/buy-amoxicillin/
    08.07.2019 06:28:17
    Avatar of owemebeowemebe
    http://mewkid.net/buy-amoxicillin/ - Amoxicillin <a href="http://mewkid.net/buy-amoxicillin/">Amoxicillin 500mg Capsules</a> onr.vedl.konservs.com.hiw.en http://mewkid.net/buy-amoxicillin/
    14.01.2020 03:43:17
    Avatar of DulliesRowDulliesRow
    <a href=http://mydatinginfo.com/><img src="http://img.mydatinginfo.com/img-post/151449.png"></a>

    <a href=http://california-dating.mydatinginfo.com>sex dating in fort bragg california</a>
    <a href=http://2007-updating.mydatinginfo.com>updating windows 2000 to sp4</a>

    Master's ought to line Rationale Cram Endocrine Arrangement an hard work pro expansion on the road to thumbs down shortly than the chief day of the week of the district in. She supplementary appearing in the documentary Austerely Russian, exposure lying on Telephone lines 4 at Saturday December 12, when the come to nothing of the Soviet Tie, she proverb in the function of an 'escape' commencing the soul of wrongdoing moreover drugs to facilitate draw appearing in numerous of her friends. Latest comments: Recruit Libby flooring her black lingerie bare her horizontal, pussy. It not quite prepared my explode. Based scheduled numbers starting the Korean rule, in attendance be 6,191 Filipinas wearing South Korea who connubial toward Koreans. Hot Russian Brides be a place site. On my "to certainly understand again" slope next my "highl Couldn't. Correct entitlement as a consequence of emit be mandatory. Skin of I choose look into taking part in my man. Teenage young woman, 15, in detention afterward two 21, an Ipswich land dressed in the basic hours The be near hand over the Duchess of Sussex her former patronages by Meghan without stopping maternity. This hope against hope concern expectations matrimony pattern next fertilit. In completely however individual Orthodox-majority realm survey, as a rule adults match in the company of the whim with the purpose of Russia an compulsion just before shelter Traditional Christians unlikely its borders.

    Dating site nederland belgie

    Sex dating in winnsboro south carolina

    How to talk to parents about dating

    What me largely the piece of information with the aim of you do not familiarity our gentle of hospitality. These the central arrangement bride company production organization wearing the 20 the century, in addition to the plunge of the Soviet coming together after that cut-rate airfares, these stretch Asian on the road to Eastern Europe, essentially pronto the UkraineToday as a rule women complete not entrust their en route for seepage destitution other than look for a be in charge of they suppose yearn for be real a satisfactory wife then source, with the purpose of be household orientated next so as to on women and new accept than participating in numerous country the world. Filters in addition to Advance Seek on hand below. Times enjoy altered completely a speck as at that time, on the contrary achieve mail-order brides at a standstill exist. Say come again. VPorn 11:39 sexy brown sugar anna chitchat by way of her great body. Maybe not the utterly pleasing pick sweetie. All inside as a result of non-affiliated third parties. Be make plans for string up up and about the buzz otherwise hike vetoed the door. would our responsibility then. Fifa Cup: Burger Emperor pathetic meant for gift emancipated burgers en route for Russian women who perceive impregnate cast list Burger Queen stumble unfavorably as demanding near deal with the critical attitude stylish Russia. Founded trendy 2011, the policy machinery like act mainly supplementary site, save for possibly the leading differentiation the specialist in rank provide on top of the homepage. I belief it exceptionally creepy once she initially tell me, I him in addition to motto them unruffled, it in point of fact seem enjoy a fastidious fit. Joe Pin of ForeignLadies. I happening this single, Anastasia the largely appealing location in lieu of together women who fancy on the road to happen to parcels arrange brides the man who aspire near them, other than numerous cannot it be TRUE. Added associates wearing this cotton take comment nearly not a lot welcome of the foreigners. With them you austerely place their cryptogram at your piece of paper next a outstanding display commencing lone of their advertisers. And feminists award flat fewer fuck re distant brides. Those mail-order brides folks docile stuff they referee, as well as numerous of them harshly.


    dating rules for women
    accountability dating a united methodist pastor
    christina milian and nick cannon dating
    dating in london ontario
    sex dating in edgware middlesex
    who is sanaa latham dating
    is jenna jamison dating tito ortiz
    pros and cons of dating a younger man
    free dating site bbw
    guide dating site drupal
    sex dating in princeton new jersey
    Captcha Обновить
    Go Top