Как сделать запрос из PHP к базе данных

mysql_query

Данное расширение устарело, начиная с версии PHP 5.5.0, и удалено в PHP 7.0.0. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:

Описание

mysql_query() посылает один запрос (посылка нескольких запросов не поддерживается) активной базе данных сервера, на который ссылается переданный дескриптор link_identifier .

Список параметров

Запрос не должен заканчиваться точкой с запятой. Данные в запросе должны быть корректно проэкранированы.

Соединение MySQL. Если идентификатор соединения не был указан, используется последнее соединение, открытое mysql_connect() . Если такое соединение не было найдено, функция попытается создать таковое, как если бы mysql_connect() была вызвана без параметров. Если соединение не было найдено и не смогло быть создано, генерируется ошибка уровня E_WARNING .

Возвращаемые значения

Для запросов SELECT, SHOW, DESCRIBE, EXPLAIN и других запросов, возвращающих результат из нескольких рядов, mysql_query() возвращает дескриптор результата запроса ( resource ), или false в случае ошибки.

Для других типов SQL-запросов, INSERT, UPDATE, DELETE, DROP и других, mysql_query() возвращает true в случае успеха и false в случае ошибки.

Полученный дескриптор результата нужно передать в функцию mysql_fetch_assoc() или любую другую функцию, работающую с результатами запросов.

Используйте mysql_num_rows() для выяснения количества рядов в результате SELECT-запроса или mysql_affected_rows() для выяснения количества обработанных рядов запросами DELETE, INSERT, REPLACE и UPDATE.

mysql_query() также завершится с ошибкой и вернет false , если у пользователя нет доступа к какой-либо из таблиц, фигурирующих в запросе.

Примеры

Пример #1 Неверный запрос

Следующий запрос составлен неправильно и mysql_query() вернёт false .

<?php
$result = mysql_query ( ‘SELECT * WHERE 1 = 1’ );
if (! $result ) <
die( ‘Неверный запрос: ‘ . mysql_error ());
>

Пример #2 Верный запрос

Следующий запрос верен, поэтому mysql_query() вернет resource .

<?php
// Эти данные, к примеру, могли быть получены от пользователя
$firstname = ‘fred’ ;
$lastname = ‘fox’ ;

// Формируем запрос
// Это лучший способ выполнить SQL-запрос
// Еще примеры можно найти в документации mysql_real_escape_string()
$query = sprintf ( «SELECT firstname, lastname, address, age FROM friends
WHERE firstname=’%s’ AND lastname=’%s'» ,
mysql_real_escape_string ( $firstname ),
mysql_real_escape_string ( $lastname ));

// Выполняем запрос
$result = mysql_query ( $query );

// Проверяем результат
// Это показывает реальный запрос, посланный к MySQL, а также ошибку. Удобно при отладке.
if (! $result ) <
$message = ‘Неверный запрос: ‘ . mysql_error () . «\n» ;
$message .= ‘Запрос целиком: ‘ . $query ;
die( $message );
>

// Используем результат
// Попытка напечатать $result не выведет информацию, которая в нем хранится
// Необходимо использовать какую-либо mysql-функцию, работающую с результатом запроса
// См. также mysql_result(), mysql_fetch_array(), mysql_fetch_row() и т.п.
while ( $row = mysql_fetch_assoc ( $result )) <
echo $row [ ‘firstname’ ];
echo $row [ ‘lastname’ ];
echo $row [ ‘address’ ];
echo $row [ ‘age’ ];
>

// Освобождаем ресурсы, ассоциированные с результатом
// Это делается автоматически в конце скрипта
mysql_free_result ( $result );
?>

Источник



Работа с MySQL в PHP

PHP поддерживает работу с базой данных MySQL.
Специальные встроенные функции для работы с MySQL позволяют просто и эффективно работать с этой СУБД: выполнять любые запросы, читать и записывать данные, обрабатывать ошибки.
Сценарий, который подключается к БД, выполняет запрос и показывает результат, будет состоять всего из нескольких строк. Для работы с MySQL не надо ничего дополнительно устанавливать и настраивать; всё необходимое уже доступно вместе со стандартной поставкой PHP.

Что такое mysqli?

mysqli (MySQL Improved) — это расширение PHP, которое добавляет в язык полную поддержку баз данных MySQL. Это расширение поддерживает множество возможностей современных версий MySQL.

Как выглядит работа с базой данных

Типичный процесс работы с СУБД в PHP-сценарии состоит из нескольких шагов:

  1. Установить подключение к серверу СУБД, передав необходимые параметры: адрес, логин, пароль.
  2. Убедиться, что подключение прошло успешно: сервер СУБД доступен, логин и пароль верные и так далее.
  3. Сформировать правильный SQL запрос (например, на чтение данных из таблицы).
  4. Убедиться, что запрос был выполнен успешно.
  5. Получить результат от СУБД в виде массива из записей.
  6. Использовать полученные записи в своём сценарии (например, показать их в виде таблицы).

Функция mysqli connect: соединение с MySQL

Перед началом работы с данными внутри MySQL, нужно открыть соединение с сервером СУБД.
В PHP это делается с помощью стандартной функции mysqli_connect() . Функция возвращает результат — ресурс соединения. Данный ресурс используется для всех следующих операций с MySQL.

Читайте также:  Важность выбора ты выбираешь какой будет твоя жизнь

Но чтобы выполнить соединение с сервером, необходимо знать как минимум три параметра:

  • Адрес сервера СУБД;
  • Логин;
  • Пароль.

Если вы следовали стандартной процедуре установки MySQL или используете OpenServer, то адресом сервера будет localhost , логином — root . При использовании OpenServer пароль для подключения — это пустая строка ‘’, а при самостоятельной установке MySQL пароль вы задавали в одном из шагов мастера установки.

Базовый синтаксис функции mysqli_connect() :

Проверка соединения

Первое, что нужно сделать после соединения с СУБД — это выполнить проверку, что оно было успешным.
Эта проверка нужна, чтобы исключить ошибку при подключении к БД. Неверные параметры подключения, неправильная настройка или высокая нагрузка заставит MySQL отвеграть новые подключения. Все эти ситуации приведут к невозможности соединения, поэтому программист должен проверить успешность подключения к серверу, прежде чем выполнять следующие действия.

Соединение с MySQL устанавливается один раз в сценарии, а затем используется при всех запросах к БД.
Результатом выполнения функции mysqli_connect() будет значение специального типа — ресурс.
Если подключение к MySQL не удалось, то функция mysqli_connect() вместо ресурса вернет логическое значение типа «ложь» — false .
Хорошей практикой будет всегда проверять значение результа выполнения этой функции и сравнивать его с ложью.

Соединение с MySQL и проверка на ошибки:

Функция mysqli_connect_error() просто возвращает текстовое описание последней ошибки MySQL.

Установка кодировки

Первым делом после установки соединения крайне желательно явно задать кодировку, которая будет использоваться при обмене данными с MySQL. Если этого не сделать, то вместо записей со значениями, написанными кириллицей, можно получить последовательность из знаков вопроса: ‘. ’.
Вызови эту функцию сразу после успешной установки соединения: mysqli_set_charset($con, «utf8»);

Выполнение запросов

Установив соединение и определив кодировку мы готовы выполнить свои первые SQL-запросы. Вы уже умеете составлять корректные SQL команды и выполнять их через консольный или визуальный интерфейс MySQL-клиента.
Те же самые запросы можно отправлять без изменений и из PHP-сценария. Помогут в этом несколько встроенных функций языка.

Два вида запросов

Следует разделять все SQL-запросы на две группы:

  1. Чтение информации (SELECT).
  2. Модификация (UPDATE, INSERT, DELETE).

При выполнении запросов из среды PHP, запросы из второй группы возвращают только результат их исполнения: успех или ошибку.
Запросы первой группы при успешном выполнении возвращают специальный ресурс результата. Его, в свою очередь, можно преобразовать в ассоциативный массив (если нужна одна запись) или в двумерный массив (если требуется список записей).

Добавление записи

Вернёмся к нашему проекту — дневнику наблюдений за погодой. Начнём практическую работу с заполнения таблиц данными. Для начала добавим хотя бы один город в таблицу cities.

Выражение INSERT INTO используется для добавления новых записей в таблицу базы данных.

Составим корректный SQL-запрос на вставку записи с именем города, а затем выполним его путём передачи этого запроса в функцию mysqli_query() , чтобы добавить новые данные в таблицу.

Обратите внимание, что первым параметром для функциии mysqli_query() передаётся ресурс подключения, полученный от функции mysqli_connect() , вторым параметром следует строка с SQL-запросом.
При запросах на изменение данных (не SELECT) результатом выполнения будет логическое значение — true или false.
false будет означать, что запрос выполнить не удалось. Для получения строки с описанием ошибки существует функция mysqli_error($link) .

Функция insert id: как получить идентификатор добавленной записи

Следующим шагом будет добавление погодной записи для нового города.
Погодные записи хранит таблица weather_log, но, чтобы сослаться на город, необходимо знать идентификатор записи из таблицы cities.
Здесь пригодится функция mysqli_insert_id() .
Она принимает единственный аргумент — ресурс соединения, а возвращает идентификатор последней добавленной записи.

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

Чтение записей

Другая частая операция при работе с базами данных в PHP — это получение записей из таблиц (запросы типа SELECT).
Составим SQL-запрос, который будет использовать SELECT выражение. Затем выполним этот запрос с помощью функции mysqli_query() , чтобы получить данные из таблицы.

В этом примере показано, как вывести все существующие города из таблицы cities:

В примере выше результат выполнения функции mysqli_query() сохранён в переменной $result .
Важно понимать, что в этой переменной находятся не данные из таблицы, а специальный тип данных — так называемая ссылка на результаты запроса.

Читайте также:  Приказ об объявлении результатов егэ

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

Цикл while здесь используется для «прохода» по всем записям из полученного набора записей.
Значение поля каждой записи можно узнать просто обратившись по ключу этого ассоциативного массива.

Как получить сразу все записи в виде двумерного массива

Иногда бывает удобно после запроса на чтение не вызывать в цикле mysqli_fetch_array для извлечения очередной записи по порядку, а получить их сразу все одним вызовом. PHP так тоже умеет. Функция mysqli_fetch_all($res, MYSQLI_ASSOC) вернёт двумерный массив со всеми записями из результата последнего запроса.
Перепишем пример с показом существующих городов с её использованием:

Как узнать количество записей

Часто бывает необходимо узнать, сколько всего записей вернёт выполненный SQL запрос.
Это может помочь при организации постраничной навигации, или просто в качестве информации.
Узнать число записей поможет функция mysqli_num_rows() , которой следует передать ссылку на результат запроса.

Источник

Как сделать запрос из PHP к базе данных

Все манипуляции с базой происходят с помощью различных SQL запросов через функцию mysqli_query. С помощью SQL запросов можно создавать и удалять таблицы, делать выборки данных по фильтру с различными сортировками, добавлять и удалять строки. Функция mysqli_query принимает два параметра: первый — это данные, описывающие соединение (результаты работы функции mysqli_connect), второй — это SQL запрос в виде простой строки.

Рассмотрим комплексный пример, в котором будут использоваться все три функции. В этом примере будет устанавливаться соединение с базой, делаться SQL запрос, выводиться результат. Для экспериментов предположим, что в базе данных существует такая таблица с описанием характеристик пользователей сайта: В этой таблице с названием USERS (пользователи) есть две колонки: NAME (имя) и FOOD (еда). В результате выполнения этого кода, на экран будет выведено две строчки: Разберём пример построчно. В первых четырёх строчках задаются текстовые значения переменным: имя базы, имя пользователя, адрес базы, пароль пользователя. Эти переменные используются в функции подключения к базе данных mysqli_connect. Далее для наглядности в отдельную переменную $query записывается текст SQL запроса. С помощью функции mysqli_query запрос передаётся базе данных. В переменную $result передаются полученные из базы данных записи, и с помощью функции fetch_assoc выполняется перебор всех полученных из базы строк. В самом конце примера соединение с базой данных закрывается функцией mysqli_close.

всего от 290 руб

Если у Вас появились вопросы по материалам на нашем сайте, то пожалуйста, пришлите нам их на почтовый адрес support@mousedc.ru. Мы обязательно ответим.

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

  • HTML
    • Основы
    • Теги
    • Основы
    • Свойства
    • Основы
    • База данных
    • Объектно-ориентированное программирование
    • Laravel
    • Yii
    • Основы
    • Советы
    • WordPress
      • Управление
      • Разработка
      • Управление
      • Разработка
      • Управление
      • Разработка
      • Управление
      • Разработка
      • Управление
      • Разработка
      • Управление
      • Разработка
      • Управление
      • Управление
      • Управление
      • Управление
      • Управление
      • Управление
      • Основы
      • Работа с DOM
      • jQuery
      • Vue
      • NodeJS
      • React
        • Основы React
        • Стейты в React
        • Компоненты React
        • Apache
        • Игровые серверы
        • Linux
        • Почта
        • SEO
        • Личный кабинет
        • Виртуальный хостинг
        • Домены

        Запишитесь на интенсивные курсы по созданию сайтов.

        Коврик для мыши новым клиентам

        Оплатите хостинг на год и получите удобный коврик

        Помощь в переносе
        с другого хостинга

        Хотите переехать? Мы поможем перенести всё

        Приветствуем всех в нашем уютном дата центре! Мы предоставляем качественный и надёжный хостинг. У нас можно заказать домены и VPS, прочитать статьи по созданию сайтов и информационной безопасности. А из наших видео подкастов можно узнать о том, как продвигать и развивать iT-проекты.

        Источник

        Функция Mysqli_query

        Функция Mysqli_query выполняет запрос к базе данных MySQL.
        Параметр Link являет собой идентификатор соединения, полученный с помощью Mysqli_connect.

        Параметр Query должен содержать текст запроса.

        Параметр Resultmode может содержать константу MYSQLI_USE_RESULT, либо MYSQLI_STORE_RESULT, которая установлена по умолчанию. При использовании MYSQLI_USE_RESULT все последующие вызовы этой функции будут возвращать ошибку Commands out of sync до тех пор, пока не будет вызвана функция Mysqli_free_result.

        Функция возвращает FALSE в случае неудачи. В случае успешного выполнения запросов SELECT, SHOW, DESCRIBE или EXPLAIN вернет объект Mysqli_result. Для остальных успешных запросов Mysqli_query вернет TRUE.

        Пример использования функции Mysqli_query:
        Результат успешного выполнения:
        Кроме данной функции за выполнение запросов также отвечают функции Mysqli_real_query и Mysqli_multi_query. Чаще всего применяется функция Mysqli_query, так как она выполняет сразу две задачи: выполняет запрос и буферизует на клиенте результат этого запроса. Вызов Mysqli_query идентичен последовательному вызову функций Mysqli_real_query и Mysqli_store_result.

        Буферизация на клиенте позволяет серверу очень быстро освобождать занятые запросом ресурсы. Построчное же чтение и дальнейшая обработка результатов клиентом довольно медленный процесс. Поэтому рекомендуется использовать буферизацию результирующих наборов именно функцией Mysqli_query.

        Обработка результатов на клиенте проще, нежели средствами сервера. PHP приложения могут свободно оперировать данными внутри буферизованных результирующих наборов. Быстрая навигация по строкам наборов обусловлена тем, что наборы полностью располагаются в памяти клиента.

        Источник

        mysqli_query

        Для не-DML запросов (не INSERT, UPDATE или DELETE), эта функция равносильна вызову функции mysqli_real_query() , а затем mysqli_use_result() или mysqli_store_result() .

        • mysqlnd на платформе Linux возвращает код ошибки 1153. Сообщение об ошибке означает » размер пакета превышает max_allowed_packet байт «.

        • mysqlnd на платформе Windows возвращает код ошибки 2006. Это сообщение об ошибке означает » отказ сервера «.

        • libmysqlclient на всех платформах возвращает код ошибки 2006. Это сообщение об ошибке означает » отказ сервера «.

        Список параметров

        Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()

        Данные в тексте запроса должны быть правильно экранированы.

        Либо константа MYSQLI_USE_RESULT , либо MYSQLI_STORE_RESULT в зависимости от требуемого поведения функции. По умолчанию используется MYSQLI_STORE_RESULT .

        При использовании MYSQLI_USE_RESULT все последующие вызовы этой функции будут возвращать ошибку Commands out of sync до тех пор, пока не будет вызвана функция mysqli_free_result()

        С константой MYSQLI_ASYNC (доступна при использовании mysqlnd) возможно выполнять запросы асинхронно. В этом случае для получения результатов каждого запроса необходимо использовать функцию mysqli_poll() .

        Возвращаемые значения

        Возвращает FALSE в случае неудачи. В случае успешного выполнения запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query() вернет объект mysqli_result. Для остальных успешных запросов mysqli_query() вернет TRUE .

        Список изменений

        Версия Описание
        5.3.0 Добавлена возможность выполнять асинхронные запросы.

        Примеры

        Пример #1 Пример использования mysqli::query()

        <?php
        $mysqli = new mysqli ( «localhost» , «my_user» , «my_password» , «world» );

        /* проверка соединения */
        if ( $mysqli -> connect_errno ) <
        printf ( «Не удалось подключиться: %s\n» , $mysqli -> connect_error );
        exit();
        >

        /* Создание таблицы не возвращает результирующего набора */
        if ( $mysqli -> query ( «CREATE TEMPORARY TABLE myCity LIKE City» ) === TRUE ) <
        printf ( «Таблица myCity успешно создана.\n» );
        >

        /* Select запросы возвращают результирующий набор */
        if ( $result = $mysqli -> query ( «SELECT Name FROM City LIMIT 10» )) <
        printf ( «Select вернул %d строк.\n» , $result -> num_rows );

        /* очищаем результирующий набор */
        $result -> close ();
        >

        /* Если нужно извлечь большой объем данных, используем MYSQLI_USE_RESULT */
        if ( $result = $mysqli -> query ( «SELECT * FROM City» , MYSQLI_USE_RESULT )) <

        /* Важно заметить, что мы не можем вызывать функции, которые взаимодействуют
        с сервером, пока не закроем результирующий набор. Все подобные вызовы
        будут вызывать ошибку ‘out of sync’ */
        if (! $mysqli -> query ( «SET @a:=’this will not work'» )) <
        printf ( «Ошибка: %s\n» , $mysqli -> error );
        >
        $result -> close ();
        >

        <?php
        $link = mysqli_connect ( «localhost» , «my_user» , «my_password» , «world» );

        /* проверка соединения */
        if ( mysqli_connect_errno ()) <
        printf ( «Не удалось подключиться: %s\n» , mysqli_connect_error ());
        exit();
        >

        /* Создание таблицы не возвращает результирующего набора */
        if ( mysqli_query ( $link , «CREATE TEMPORARY TABLE myCity LIKE City» ) === TRUE ) <
        printf ( «Таблица myCity успешно создана.\n» );
        >

        /* Select запросы возвращают результирующий набор */
        if ( $result = mysqli_query ( $link , «SELECT Name FROM City LIMIT 10» )) <
        printf ( «Select вернул %d строк.\n» , mysqli_num_rows ( $result ));

        /* очищаем результирующий набор */
        mysqli_free_result ( $result );
        >

        /* Если нужно извлечь большой объем данных, используем MYSQLI_USE_RESULT */
        if ( $result = mysqli_query ( $link , «SELECT * FROM City» , MYSQLI_USE_RESULT )) <

        /* Важно заметить, что мы не можем вызывать функции, которые взаимодействуют
        с сервером, пока не закроем результирующий набор. Все подобные вызовы
        будут вызывать ошибку ‘out of sync’ */
        if (! mysqli_query ( $link , «SET @a:=’this will not work'» )) <
        printf ( «Ошибка: %s\n» , mysqli_error ( $link ));
        >
        mysqli_free_result ( $result );
        >

        Источник