Вечная тема с PHP и MySQL
Всем привет! Наверняка каждый из тех, кто много и постоянно пишет на PHP сталкивался с вопросом оптимизации и упрощения запросов в базы данных MySQL. Кто-то написал уже себе удобные классы/процедуры, кто-то нашел что-нибудь на просторах сети.
Поскольку у меня скрипты на PHP все больше и больше начинают сворачиваться к одной задаче — выборке из базы данных и передаче этих данных клиентским Java-скриптам, я себе облегчил участь тем, что создал удобный (для меня, конечно) класс по работе с базами данных MySQL.
Сразу оговорюсь — встроенный класс mqsli достаточно удобен и функционален, но сталкиваясь день ото дня с одними и теми же вопросами было бы странно немного не облегчить свою участь.
Вашему вниманию предлагается класс exDBase, это по сути своей оболочка для класса mysqli. Сразу оговорюсь — я программист начинающий, и готов в комментариях или личных сообщениях получить массу критики за написанный код. Я не очень владею RegExp например, которые сильно бы упростили код, возможно есть и другие претензии. Но, тем не менее…
Вся библиотека содержится в одном файле — exdbase.php. Это файл содержит описание класса exDBase. Чтобы начать работать, нужно просто, скачав файл, прописать такую строчку:
Для начала создадим экземпляр класса, это очень просто:
В свойстве $DB->error всегда будет ошибка последней операции (если была ошибка), либо оно будет пустым.
Формат практически идентичен созданию экземпляра класса mysqli. Естественно, вместо указанных в примере констант нужно подставить реальные значения для хоста, имени пользователя, пароля и имени базы данных.
Теперь можно и поупражняться. Допустим у нас есть готовая база данных, и в ней есть таблица clients с полями:
ID — уникальный номер, автоинкремент
NAME — имя клиента
AGE — возраст клиента
AMOUNT — сумма покупок
BLOCKED — булева переменная, заблокирован клиент или активен
SETTINGS — личные параметры, мы их храним в формате JSON
Запрос в базу данных
Давайте получим все записи из таблицы ‘clients‘. Для этого существует метод fetchArray.
А если мы хотим получить только первую запись запроса? Для этого есть метод fetchFirst.
Но, нам вряд ли понадобится получать все записи из таблицы, всегда есть условия отбора (поле WHERE в команде SELECT). Как нам поступить? Да очень просто. Это второй аргумент методов fetchArray или fetchFirst.
Допустим, что мы хотим выбрать всех клиентов с именем John. В нашем классе это можно сделать двумя способами.
Первый — просто задать условие строкой вида «NAME = ‘John’»
Второй — задать условие массивом:
А если есть еще условия? Например, возраст должен равняться 30 лет? Легко:
Таким образом можно объединять несколько условий поиска. Но равенство… А если мы хотим найти всех клиентов с именем John, которые старше 25 лет? Тут на помощь приходят специальные префиксы:
Кроме «>=» вы можете использовать: «>», » «, «!=». Таким образом можно создавать запросы разной степени сложности и всегда получать нужные ответы.
Третий параметр методов выборки из базы данных — это поля таблицы. Их можно задать как строкой (например: «NAME, AGE»), так и массивом: array («NAME», «AGE»).
Четвертый и последний параметр методов выборки fetchArray и fetchFirst это порядок сортировки. Он также задается либо строкой (типа: «ID ASC, NAME DESC») либо массивом array («ID» => «ASC», «NAME» => «DESC»).
Ну, заканчивая с получением данных вы спросите — а как лимитировать выборку? Например, нужны только 10 первых записей?
Это делается методом setLimit(), вот так:
Метод setLimit() работает только на один запрос, после этого лимиты обнуляются.
Вставка новых данных
Для записи новых данных существует метод insert().
Он возвращает значение первичного ключа автоинкремента (если такой задан в таблице). В нашем случае он вернет ID вставленной записи.
Обновление данных
Обновление данных осуществляется методом update().
Мы обновили все записи где имя (поле NAME) — это ‘Peter’. Второй аргумент метода — это условие выбора, точно в таком же формате как WHERE для SELECT. Ну, а третий аргумент метода — это сами данные. Теперь у всех таких записей с именем ‘Peter’ возраст будет равен 30, а сумма — 2000.25.
Удаление данных
Если вы уже поняли логику работы библиотеки, то удаление дастся очень просто. Метод называется delete().
Вот такой вот первый краткий экскурс в библиотеку exDBase. Существует еще целый ряд других, более продвинутых функций, но об этом в другой раз.
Учебник по PHP 4
![]() | |||||||||||||||||||||||||||||||||||||||||||||||
Взаимодействие PHP и MySQLВ этом разделе приводятся описания наиболее часто используемых функций, позволяющих работать с MySQL средствами PHP. mysql_connectЭта функция устанавливает соединение с сервером server MySQL и возвращает дескриптор соединения с базой данных, по которому все другие функции, принимающие этот дескриптор в качестве аргумента, будут однозначно определять выбранную базу данных. Вторым и третьим аргументами этой функции являются имя пользователя username и его пароль password соответственно: mysql_closemysql_select_dbИспользование этой функции эквивалентно вызову команды USE в SQL-запросе, т. е. функция mysql_select_db выбирает базу данных для дальнейшей работы, и все последующие SQL-запросы применяются к выбранной базе данных. Функция принимает в качестве аргументов название выбираемой базы данных database_name и дескриптор соединения resource. Функция возвращает true при успешном выполнении операции и false в противном случае. К примеру: Имеет смысл помещать функции для соединения и выбора базы данных в тот же файл (config.php), где объявлены переменные с именами сервера, пользователя и паролем: mysql_queryРезультат выполнения показан на следующем рисунке: mysql_fetch_arrayРезультат показан на следующем рисунке: mysql_resultС помощью этой функции можно получить доступ к отдельному полю записи. Допустим, нам нужно вывести имя автора, который первым найдется в базе данных. Сделать это можно следующим образом: mysql_fetch_objectЭта функция возвращает поля записи данных в виде объекта. Ниже приведен пример, в котором с помощью этой функции из таблицы authors выводятся имя, URL и e-mail авторов. Результат выполнения показан на следующем рисунке: mysql_fetch_rowРезультат выполнения этого кода в точности совпадает с приведённым выше.
Если Вам нужна частная профессиональная консультация от авторов многих книг Кузнецова М.В. и Симдянова И.В., добро пожаловать в наш Консультационный Центр SoftTime. Функции СУБД MySQLПримечанияСодержаниеUser Contributed Notes 38 notes@Amanda 12-Oct-2007 09:58 I almost had to ask myself if this was a real question. If the MySQL server rejects the connection attempt then, yes, MySQL would be able to send back an error to PHP. And if PHP can’t access the target MySQL server at all then it is also smart enough to issue the appropriate error all by itself. A note on resources After finally getting IIS, PHP, and MySQL on a new Windows XP machine, I decided to write the steps I took so you can see how it was done: http://www.atksolutions.com/articles/install_php_mysql_iis.html Here a mysql helper containing the main functions of the mysql extension. It’s easy to understand for a beginner and quite useful because queries are secure. It understands what you want, just write your sql query. I called it mysql_magic. $query = «SELECT username FROM users WHERE username REGEXP ‘$username[0-9*]'»; You should use this instead: $query = «SELECT username FROM users WHERE username REGEXP ‘$ /* On Windows, the recommended way to run MySQL is to install it as a Windows service, whereby MySQL starts and stops automatically when Windows starts and stops. A MySQL server installed as a service can also be controlled from the command line commands, or with the graphical Services utility like phpMyAdmin. MySQL is no longer enabled by default, so the php_mysql.dll DLL must be enabled inside of php.ini. Also, PHP needs access to the MySQL client library. A file named libmysql.dll is included in the Windows PHP distribution and in order for PHP to talk to MySQL this file needs to be available to the Windows systems PATH. Following PHP Script is useful to test PHP connection with MySQL. For Windows users, please note: If apache is installed as a service, and you change PATH variable so it can reach libmysql.dll, you will need to reboot your machine in order to have changes applied. This may not be watertight if the «;\n» sequence appears inside queries, but I hope it helps others who are in posession of such dumps. If you want to get PHP working nicely with MySQL, even with Apache, under Windows based systems, try XAMPP, from Apache Friends. It saves messing about with config files, which is the only major problem with trying to get the three to work together under windows. Работа с базами данных SQL в PHP для новичковУчебник PHPПрактикаВажноеРегуляркиРабота с htaccessФайлы, папкиСессии и кукиРабота с БДПрактика по работе с БД в PHPПеред чтением см. новые уроки раздела «Важное», которые появились выше. ПрактикаДвижок PHPПродвинутые БДАутентификацияПрактикаООП и MVCАбстрактные классы и интерфейсыТрейтыООП МагияПрактикаПрактика: классы как набор методовЧто такое база данныхЭто могут быть тексты страниц, списки пользователей с их логинами и паролями, каталоги продукции и другое. База данных состоит из таблиц. Что такое таблица вы знаете из жизни: это строки и столбцы. А на пересечении строк и столбцов располагаются ячейки. В базах данных столбцы часто называют полями. PhpMyAdminДля редактирования баз данных часто пользуются программой PhpMyAdmin. Видео на PhpMyAdminЗадачи на PhpMyAdminДавайте откроем PhpMyAdmin и приступим к изучению его интерфейса. Чтобы вам было проще с ним освоится, сделайте следующие практические задачи: AUTO_INCREMENTОбратите внимание на то, что мы создали поле id и поставили ему галочку AUTO_INCREMENT. Это очень важный шаг! Теперь при вставке новой записи (строки) в таблицу это поле будет заполняться автоматически уникальным номером. При этом если мы удалим строку с каким-то id (например 1), то такого id больше никогда не будет. Зачем нужно поле id? Затем, чтобы мы всегда могли обратиться к конкретной строке по ее id, например с целью удаления или редактирования. Типы переменныхВ SQL довольно много типов переменных, но чаще всего приходится пользоваться следующими: Как работать с mySQL через PHPРабота с БД из PHP осуществляется всего лишь с помощью трех функций: Далее подробнее про каждую из функций. Устанавливаем соединение с БДДанный материал есть также в виде видео: https://youtu.be/J8GFuyA_k_8 Прежде, чем начать работать с базой данных из PHP, нужно установить соединение с сервером, на котором эта база находится. Делается это с помощью функции PHP mysql_connect, которая принимает 3 параметра: имя хоста (сервера), имя пользователя, под которым мы работаем с базой и пароль для этого пользователя. Давайте установим соединение с базой данных: Посылаем запросы к базе данныхЭто относиться к командам SELECT, UPDATE, FROM, DELETE, WHERE и другим такого рода. Конечно, синтаксической ошибки не будет, если вы напишите их маленькими буквами, но принято большими. Отлавливаем ошибки базы данныхМногие начинающие зачастую не умеют отлавливать ошибки, которые вернула база данных. Чтобы вывести ошибки, следует пользоваться конструкцией or die ( mysqli_error($link) ), которую необходимо добавлять к каждому запросу к БД. Таким образом вы сразу будете получать сообщения об ошибках синтаксиса SQL. Обратите внимание на то, что на рабочем сайте эти конструкции следует удалять, чтобы пользователи и тем более хакеры не видели ошибок БД. Проблемы с кодировкамиЧтобы не было проблем с кодировками следует придерживаться простых правил: Начнем практиковатьсяСейчас мы с вами начнем изучить SQL запросы на практике. Для этого нам понадобится тестовая таблица в базе данных, заполненная некоторыми данными. Сейчас мы с вами ее сделаем и заполним. Итак, создайте свою первую базу данных с помощью PhpMyAdmin. Создайте в этой базе новую таблицу. Назовите ее «workers» (англ. работники). В ней создайте 4 столбца (столбцы по другому называются поля): Ее заполните тестовыми данными, как показано в таблице ниже (этот шаг обязателен, так как дальше все задачи будут по этой таблице):
Тестируем работоспособностьПросто скопируйте этот код и запустите его у себя: В таком случае проверьте все еще раз, уберите последовательно все ошибки PHP, если таковые есть. Как достать результатПосле того, как мы сделали запрос к базе, в переменной $result будет лежать результат этого действия. Однако лежит он не в той форме, которая нам нужна в PHP, а в той форме, в которой его прислала нам база. Достать результат в нормальном виде (в массиве) можно с помощью следующего кода: Как работает последняя строка? Функция mysqli_fetch_assoc считывает последовательно каждую строку результата, который прислала нам база. В цикле for мы считываем построчно результат из базы. А результат из БД будет лежать в нормальном виде в массиве $data. Работа с MySQL в PHPPHP поддерживает работу с базой данных MySQL. Что такое mysqli?mysqli (MySQL Improved) — это расширение PHP, которое добавляет в язык полную поддержку баз данных MySQL. Это расширение поддерживает множество возможностей современных версий MySQL. Как выглядит работа с базой данныхТипичный процесс работы с СУБД в PHP-сценарии состоит из нескольких шагов: Функция mysqli connect: соединение с MySQLНо чтобы выполнить соединение с сервером, необходимо знать как минимум три параметра: Базовый синтаксис функции mysqli_connect() : Проверка соединенияПервое, что нужно сделать после соединения с СУБД — это выполнить проверку, что оно было успешным. Соединение с MySQL и проверка на ошибки: Функция mysqli_connect_error() просто возвращает текстовое описание последней ошибки MySQL. Установка кодировкиПервым делом после установки соединения крайне желательно явно задать кодировку, которая будет использоваться при обмене данными с MySQL. Если этого не сделать, то вместо записей со значениями, написанными кириллицей, можно получить последовательность из знаков вопроса: ‘. ’. Выполнение запросовУстановив соединение и определив кодировку мы готовы выполнить свои первые SQL-запросы. Вы уже умеете составлять корректные SQL команды и выполнять их через консольный или визуальный интерфейс MySQL-клиента. Два вида запросовСледует разделять все SQL-запросы на две группы: При выполнении запросов из среды PHP, запросы из второй группы возвращают только результат их исполнения: успех или ошибку. Добавление записиВернёмся к нашему проекту — дневнику наблюдений за погодой. Начнём практическую работу с заполнения таблиц данными. Для начала добавим хотя бы один город в таблицу cities. Выражение INSERT INTO используется для добавления новых записей в таблицу базы данных. Функция insert id: как получить идентификатор добавленной записиТеперь у нас есть всё необходимое, чтобы добавить погодную запись. Чтение записейВ этом примере показано, как вывести все существующие города из таблицы cities: Чтобы получить действительные данные, то есть записи из таблицы, следует использовать другую функцию — mysqli_fetch_array() — и передать ей единственным параметром эту самую ссылку. Цикл while здесь используется для «прохода» по всем записям из полученного набора записей. Как получить сразу все записи в виде двумерного массиваИногда бывает удобно после запроса на чтение не вызывать в цикле mysqli_fetch_array для извлечения очередной записи по порядку, а получить их сразу все одним вызовом. PHP так тоже умеет. Функция mysqli_fetch_all($res, MYSQLI_ASSOC) вернёт двумерный массив со всеми записями из результата последнего запроса. Как узнать количество записей | ||||||||||||||||||||||||||||||||||||||||||||||









