SQL – запросы и их обработка с помощью PHP
PHP
Назначение PHP-интерпретатора PHP-скрипты обычно обрабатываются интерпретатором в порядке, обеспечивающем кроссплатформенность разработанного приложения:
Для увеличения быстродействия приложений возможно использование специального программного обеспечения, так называемых акселераторов. Принцип их работы заключается в кэшировании однажды сгенерированного байт-кода в памяти и/или на диске, таким образом, из процесса работы приложения исключаются этапы 1—3, что в общем случае ведёт к значительному ускорению работы. Важной особенностью является то, что разработчику нет необходимости заботиться о распределении и освобождении памяти. Ядро PHP реализует средства для автоматического управления памятью; вся выделенная память возвращается системе после завершения работы скрипта.
Расширения Интерпретатор состоит из ядра и подключаемых модулей, «расширений», представляющих собой динамические библиотеки. Расширения позволяют дополнить базовые возможности языка, предоставляя возможности для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и тому подобным. Любой желающий может разработать своё собственное расширение и подключить его. Существует огромное количество расширений, как стандартных, так и созданных сторонними компаниями и энтузиастами, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Множество расширений доступно в репозитории PECL.
Параметры настройки Интерпретатор PHP имеет специальный конфигурационный файл — php.ini, содержащий множество настроек, изменение которых влияет на поведение интерпретатора. Имеется возможность отключить использование ряда функций, изменить ограничения на используемую скриптом оперативную память, время выполнения, объём загружаемых файлов, настроить журналирование ошибок, работу с сессиями и почтовыми сервисами, подключить дополнительные расширения, а также многое другое. Возможно дробление большого конфигурационного файла на части. Например, широко распространена практика вынесения настроек расширений в отдельные файлы. Параметры интерпретатора могут быть переопределены в файлах конфигурации HTTP-сервера (например,.htaccess в Apache) или в самом скрипте во время выполнения при помощи команды ini_set.
Режимы запуска интерпретатора (SAPI) SAPI - это внешний уровень абстракции, предназначенный для встраивания интерпретатора в другие приложения и отвечает за его работу (запуск, остановка, передача скриптов на исполнение, досуп к внешним данным). Существует насколько основных SAPI определяющих способы запуска и использования PHP:
Начиная с версии PHP 5.4.0 в CLI SAPI появилась возможность запуска PHP как отдельного HTTP сервера. Однако, этот режим предназначен исключительно для разработки, так как запускает только один процесс интерпретатора и выполняет все запросы исключительно последовательно.
Альтернативные реализации В силу популярности языка PHP и желания увеличить быстродействие основанных на нём веб-приложений, создано несколько альтернативных компиляторов, близких к PHP языку. Так в феврале 2010 года компания Facebook открыла свой компилятор PHP — HipHop (HPHP, Hyper-PHP) генерирующий код на C++, с последующей компиляцией в машинный код с помощью gcc.
Основные синтаксические конструкции PHP Синтаксис PHP подобен синтаксису языка Си. Некоторые элементы, такие как ассоциативные массивы и цикл foreach, заимствованы из Perl. Для работы программы не требуется описывать какие-либо переменные, используемые модули и т. п. Любая программа может начинаться непосредственно с оператора PHP. Открывающий тег вида <?= используется для сокращённой записи конструкций используемых для вывода строки. PHP исполняет код, находящийся внутри ограничителей, таких как <?php?>. Всё, что находится вне ограничителей, выводится без изменений. В основном это используется для вставки PHP-кода в HTML-документ. echo — Выводит одну или более строк.
void echo (string $arg1 [, string $... ]) Выводит все аргументы. На самом деле echo - это не функция, а конструкция языка, поэтому заключать аргументы в скобки необязательно. echo (в отличии от других языковых конструкций) не ведет себя как функция, поэтому не всегда может быть использована в контексте функции. Вдобавок, если вы хотите передать более одного аргумента в echo, эти аргументы нельзя заключать в скобки. Методы передачи данных
Данные методом GET передаются путем их добавления к URL-адресу вызываемого сценария, предназначенного для обработки полученной информации. Для пояснения данного метода наберите в адресной строке браузера URL-адрес ресурса и добавьте сначала знак вопроса (?), а затем строчку num=10. Например файл script.php:
<html> И теперь вызовите этот файл в браузере http://путь/script.php?num=10&type=new&v=text
Для отправки данных методом POST нужно использовать HTML -формы. <form action="script_post.php" method="post" >
Условные выражения Конструкция if является одной из наиболее важных во многих языках программирования, в том числе и PHP. Она предоставляет возможность условного выполнения фрагментов кода. Структура if реализована в PHP по аналогии с языком C: if (выражение) инструкция
Следующий пример выведет a больше b, если значение переменной $a больше, чем $b: <?php
Оператор switch подобен серии операторов IF с одинаковым условием. Во многих случаях вам может понадобиться сравнивать одну и ту же переменную (или выражение) с множеством различных значений, и выполнять различные участки кода в зависимости от того, какое значение принимает эта переменная (или выражение). Это именно тот случай, для которого удобен оператор switch.
Пример:
<?php switch ($i) {
Циклы Цикл for самый сложный цикл в PHP. Он ведет себя так же как его аналог в языке C. Синтаксис цикла for следующий: for (expr1; expr2; expr3) statementПример вывода на экран чисел от 1 до 10: ?>
Циклы while являются простейшим видом циклов в PHP. Они ведут себя так же, как и их коллеги из языка C. Простейшей формой цикла while является следующее выражение:
Пример вывода на экран чисел от 1 до 10: $i = 1; } ?>
Цикл do-while очень похож на цикл while, с тем отличием, что истинность выражения проверяется в конце итерации, а не в начале. Главное отличие от обычного цикла while в том, что первая итерация цикла do-while гарантированно выполнится (истинность выражения проверяется в конце итерации), тогда как она может не выполниться в обычном цикле while (истинность выражения которого проверяется в начале выполнения каждой итерации, и если изначально имеет значение FALSE, то выполнение цикла будет прервано сразу). Есть только один вариант синтаксиса цикла do-while: <?php
Пример: <?php /* обработка i */ } while (0);
Массивы На самом деле массив в PHP - это упорядоченное отображение, которое устанавливает соответствие между значением и ключом. Этот тип оптимизирован в нескольких направлениях, поэтому вы можете использовать его как собственно массив, список (вектор), хэш-таблицу (являющуюся реализацией карты), словарь, коллекцию, стэк, очередь и, возможно, что-то еще. Так как значением массива может быть другой массив PHP, можно также создавать деревья и многомерные массивы. Синтаксис array(key => value, key2 => value2, key3 => value3,...)Пример: Простой массив <?php // Начиная с PHP 5.4 Типы данных PHP является языком программирования с динамической типизацией, не требующим указания типа при объявлении переменных, равно как и самого объявления переменных. Преобразования между скалярными типами зачастую осуществляются неявно без дополнительных усилий (впрочем, PHP предоставляет широкие возможности и для явного преобразования типов).
К скалярным типам данных относятся:
К нескалярным типам относятся:
К псевдотипам относятся:
Обращение к переменным и функциям Обращение к переменным осуществляется с помощью символа $, за которым следует имя переменной. Данная конструкция может быть применена также для создания динамических переменных и функций.
В PHP echo и print не являются функциями (хотя print имеет возвращаемое значение), а являются синтаксическими единицами. При их использовании можно опустить скобки. Суперглобальные массивы Суперглобальными массивами (англ. Superglobal arrays) в PHP называются предопределённые массивы, имеющие глобальную область видимости без использования директивы global. Большая часть этих массивов содержит входные данные запроса пользователя (параметры GET-запроса, поля форм при посылке методом POST, куки и т. п.).
$GLOBALS Массив всех глобальных переменных (в том числе и пользовательских). $_SERVER (аналог для устаревшего — $HTTP_SERVER_VARS) Содержит переменные окружения, которые операционная система передаёт серверу. $_ENV (уст. $HTTP_ENV_VARS) Текущие переменные среды (англ. Environment variables). Их набор специфичен для платформы, на которой выполняется скрипт. $_GET (уст. $HTTP_GET_VARS) Содержит параметры GET-запроса, переданные в URI после знака вопроса «?». $_POST (уст. $HTTP_POST_VARS) Ассоциативный массив значений полей HTML-формы при отправке методом POST. Индексы элементов соответствуют значению свойства name объектов(кнопки, формы, радио-кнопки, флажки и т. д.) HTML-формы. $_FILES (уст. $HTTP_POST_FILES) Ассоциативный массив со сведениями об отправленных методом POST файлах. Каждый элемент имеет индекс, идентичный значению атрибута «name» в форме, и, в свою очередь, также является массивом со следующими элементами:
$_COOKIE (уст. $HTTP_COOKIE_VARS) Ассоциативный массив с переданными агентом пользователя значениями куки. $_REQUEST Содержит элементы из массивов $_GET, $_POST, $_COOKIE. С версии PHP 4.1 включает $_FILES. $_SESSION (уст. $HTTP_SESSION_VARS) Содержит данные сессии. Управление выводом ошибок PHP поддерживает один оператор управления ошибками: знак (@). В случае, если он предшествует какому-либо выражению в PHP-коде, любые сообщения об ошибках, генерируемые этим выражением, будут проигнорированы.
В случае, если установлена опция track_errors, все генерируемые сообщения об ошибках будут сохраняться в переменной $php_errormsg. Эта переменная будет перезаписываться при каждой новой ошибке, поэтому в случае необходимости проверяйте ее сразу же.
Для включения отображения сообщения об ошибках добавьте в php-скрипт следующий код: error_reporting(E_ALL); ini_set('display_errors', 'on');
В этом случае, все предупреждения (warning), замечания (notice) и ошибки (error) в php-коде, будут выводится на странице Вашего сайта при обращении к скрипту. Если в коде Ваших скриптов уже присутствует вызов функций error_reporting() и ini_set() с параметром 'display_errors' - закомментируйте их. Обратите внимание, что хотя предупреждения и замечания носят рекомендательный характер, они могу приводить к неправильной работе скрипта. Объектно-ориентированный подход к программированию
Ключевое слово class было зарезервировано ещё в третьей версии языка. В четвёртой версии стало возможно создавать классы и объекты на их основе. Однако принципы ООП поддерживались лишь частично, так например, все члены (переменные и методы) были открыты. К тому же создание объектов было дорогой операцией и работали они медленно. Начиная с пятой версии PHP обладает полной поддержкой ООП. Работа с классами была оптимизирована и теперь такой код работает достаточно быстро. Начиная с версии 5.4.0 множественное наследование может быть реализовано с помощью механизма особенностей (англ. trait). class C1 extends C2 implements I1, I2{ private $a; protected $b; function __construct($a, $b) { parent::__construct($a, $b); $this->a = $a; $this->b = $b; } public function plus() { return $this->a + $this->b; } /*............... */ } $d = new C1(1, 2);echo $d->plus(); // 3
Паттерны проектирования Паттерн проектирования (design pattern) - это общее типовое решение некоторой проблемы, многократно повторяемое в процессе проектирования архитектуры программного продукта. Они показывают отношения и взаимодействия между классами, позволяют сделать систему гибкой и легко изменяемой. За счет их правильного использования повышается коэффициент использования готовых решений.
Паттерн Factory (фабрика) Многие паттерны проектирования в оригинальной книге Design Patterns поощряют слабую связанность. Для понимания этой концепции нужно упомянуть о борьбе, через которую проходят многие разработчики крупных систем. Проблема возникает при изменении куска кода и дальнейшей попытке отследить влияние этого изменения на систему (и в худшем случае — наблюдением за каскадом отказов системы, которые, предполагалось, никак с изменённым кодом не связанными).
Factory1.php <?phpinterface IUser{ function getName();} class User implements IUser{ public function __construct($id) { } public function getName() { return "Jack"; }} class UserFactory{ public static function Create($id) { return new User($id); }} $uo = UserFactory::Create(1);echo($uo->getName()."\n");?>
Паттерн Observer (наблюдатель) Паттерн Observer предлагает ещё один способ, чтобы избежать сильной связанности между компонентами. Этот паттерн простой: один объект делает себя наблюдаемым, добавляя метод, который позволяет другому объекту, наблюдателю, себя зарегистрировать. Когда наблюдаемый объект изменяется, он посылает уведомление зарегистрированным наблюдателям. Что происходит после получения уведомления с наблюдателем, не зависит от наблюдаемого объекта. В результате получаем способ общения между объектами без необходимости понимания, зачем.
Observer.php <?phpinterface IObserver{ function onChanged($sender, $args);} interface IObservable{ function addObserver($observer);} class UserList implements IObservable{ private $_observers = array(); public function addCustomer($name) { foreach($this->_observers as $obs) $obs->onChanged($this, $name); } public function addObserver($observer) { $this->_observers []= $observer; }} class UserListLogger implements IObserver{ public function onChanged($sender, $args) { echo("'$args' added to user list\n"); }} $ul = new UserList();$ul->addObserver(new UserListLogger());$ul->addCustomer("Jack");?>В коде определяются 4 элемента: 2 интерфейса и 2 класса. Интерфейс IObservable определяет наблюдаемый объект, а UserList реализует этот интерфейс, чтобы зарегистрироваться в качестве наблюдаемого. IObserver определяет, что нужно, чтобы стать наблюдателем, а UserListLogger реализует интерфейс IObserver.
Шаблонизатор Smarty Smarty – один из самых известных шаблонизаторов. Шаблонизатор нужен для разделения PHP-кода от HTML-кода. Если первый раз с этим сталкиваешься, преимущества такого подхода заметны не сразу, но потом ты удивляешься, как раньше мог обходиться без шаблонов. Пример с использованием Smarty: <?php // подключаем класс Smartyrequire_once('smarty/Smarty.class.php'); // Создаем объект класса$smarty = new Smarty(); // Устанавливаем папки шаблонов// 'templates' – каталог, в котором хранятся шаблоны// 'templates_c' - туда Smarty сохраняет скомпилированные шаблоны $smarty->template_dir = 'templates';$smarty->compile_dir = 'templates_c'; // Получение данных их БД (в виде ассоциативного массива)$news = $DB->query("SELECT * FROM news ORDER BY id LIMIT 0,10"); // передаем массив в шаблонизатор$smarty->assign('news', $news); /* Допустим что наша задача была в простом выводе данных в шаблон, что мы уже и сделали,и это конечный этап – вызываем метод display() класса smarty, который выводит,передаёт данные в шаблон, перекомпилирует (если были изменения) и выводит контент.Методу передается имя файла шаблона, в котором как предполагается был обработаннужным образом массив news */ $smarty->display('news.tpl');?>
SQL – запросы и их обработка с помощью PHP SQL - это аббревиатура, которая так и "раскрывается" - структуризированный язык запросов. Данная функция посылает запрос к базе данных и возвращает в случае успешного обращения идентификатор ресурса. Итак mysql_connect () - функция для подключения к серверу MySQL на Вашем хостинге. Здесь $dbh - дескриптор, которые при соединении возвратила функция mysql_connect. Итак таблица создана. Выполним первый запрос, который сразу оформим в виде PHP-кода: <?php// Файл firstsql.php$host='localhost'; // имя хоста (уточняется у провайдера)$database='db_name'; // имя базы данных, которую вы должны создать$user='user_name'; // заданное вами имя пользователя, либо определенное провайдером$pswd='your_pass'; // заданный вами пароль $dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");mysql_select_db($database) or die("Не могу подключиться к базе.");$query = "SELECT * FROM `my_sql_table`";$res = mysql_query($query);while($row = mysql_fetch_array($res)){echo "Номер: ".$row['id']."<br>\n";echo "Имя: ".$row['firstname']."<br>\n";echo "Фамилия: ".$row['surname']."<br><hr>\n";}?>Разберем PHP-код файла firstsql.php. Начнем с собственно запроса к таблицам базы данных (БД). $query = "SELECT * FROM `my_sql_table`";Данный запрос можно расшифровать так: выбрать из таблицы my_sql_table БД все записи из всех полей. Таким образом знак * после слова SELECT означает "выбрать абсолютно все". Итак, запрос сформирован. Теперь его надо выполнить: $res = mysql_query($query);В случае успешного выполнения запроса функция mysql_query() вернет нам идентификатор ресурса $res. можно прокомментировать так: пока введенная нами переменная $row получает не нулевые результаты работы функции mysql_fetch_row следует выдать в броузер значение полей $row['id'], $row['firstname'], $row['surname'] с помощью echo. то это будет означать, что из всех строк выбирается только значения поля firstname. Если Вы хотите выбрать строки таблицы с конкретным значением id где фамилия (surname) будет Петров, то запрос перепишется следующим образом: $query = "SELECT id FROM `my_sql_table` where surname='Петров'";А вот если потребуется узнать фамилию того, кто находится под номером, к примеру, 5, то запрос будет таким: $query = "SELECT surname FROM `my_sql_table` where id=5";В этом случае Вы знаете, что результатом запроса будет всего одна строка из таблицы. Т.е. нет смысла организовывать цикл с использованием while. И обработка запроса будет следующей $res = mysql_query($query);$row = mysql_fetch_row($res);echo "Фамилия пятого человека в списке: ".$row[0]."\n";Здесь вместо mysql_fetch_array() мы применили mysql_fetch_row(). Т.е. получить значение поля (или полей) конкретной строки. Поскольку поле у нас было одно - surname - мы можем обратиться к единственному элементу массива $row как $row[0];. Итак, рассмотрим наиболее типичные примеры запросов MySQL. Рассмотрение проведем на базе таблицы my_sql_table: VARCHAR(50) NOT NULL AFTER `surname`"; 2. Теперь удалим поле surname из таблицы my_sql_table: $query = "ALTER TABLE `my_sql_table` DROP `surname`";3. Удаляем записи из таблицы my_sql_table с фамилией Сидоров: $query = "DELETE FROM `my_sql_table` where surname='Сидоров'";4. Помимо знаков равенства, также "больше" или "меньше", в языке MySQL запросов существует понятие " похоже на ". Выберем записи из таблицы my_sql_table, где в фамилии встречается " дор ": $query = "SELECT * FROM `my_sql_table` where surname like '%дор%'";Здесь наличие " % " в начале и конце 'дор' и означает, что запрос будет искать именно 'дор', причем не важно в начале, конце, или середине фамилии он находится. Рассмотрим следующий пример 6. Вычислим максимальное значение id: $query = "SELECT MAX(id) FROM `my_sql_table`";7. Вычислим количество полей в my_sql_table с фамилией, которая начинается на П. $query = "SELECT COUNT(*) FROM `my_sql_table` where surname like 'П%'";8. Удаление таблицы my_sql_table: $query = "DROP TABLE `my_sql_table`";Для запросов 1-3 на языке PHP достаточно просто выполнить запрос: mysql_query($query);
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|