mysql_query — Посылает запрос MySQL


Содержание

Mysql_query — Посылает запрос MySQL

mysql_query — отправляет MySQL-запрос/query.

Описание

resource mysql_query (string query [, resource link_identifier [, int result_mode]])

mysql_query() отправляет запрос текущей активной БД на сервере, ассоциированной со специфицированным идентификатором ссылки/link_identifier. Если link_identifier не специфицирован, принимается последняя открытая ссылка. Если такой ссылки нет, функция пытается установить ссылку, как при вызове mysql_connect() без аргументов, и использует её.

Необязательный параметр result_mode может иметь значение MYSQL_USE_RESULT и MYSQL_STORE_RESULT. По умолчанию MYSQL_STORE_RESULT, т.е. результат буферизуется. См. также mysql_unbuffered_query() — это функция противоположного действия.

Примечание: строка запроса не должна заканчиваться точкой с запятой (;).

Только для операторов SELECT, SHOW, EXPLAIN или DESCRIBE функция mysql_query() возвращает идентификатор ресурса, FALSE если запрос не был выполнен корректно. Для других типов SQL-операторов mysql_query() возвращает TRUE при успехе, FALSE при ошибке. Не- FALSE return-значение означает, что запрос был правильным и может быть выполнен на сервере. Она ничего не сообщает о количестве задействованных или возвращаемых рядов. Это отличная возможность для запроса продолжить выполнени t , не задействуя и не возвращая рядов.

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

Пример 1. mysql_query()

Следующий запрос семантически неверен, поскольку my_col не является столбцом таблицы my_tbl , поэтому mysql_query() терпит неудачу и возвращает FALSE :

Пример 2. mysql_query()

mysql_query() терпит также неудачу и возвращает FALSE , если вы не имеете прав доступа к таблице(-ам), на которую сделана ссылка в запросе.

Приняв, что запрос прошёл, вы можете вызвать mysql_num_rows() для определения количества рядов, возвращаемых оператором SELECT, или mysql_affected_rows() для определения количества рядов, задействованных оператором DELETE, INSERT, REPLACE или UPDATE.

Только для SELECT, SHOW, DESCRIBE или EXPLAIN функция mysql_query() возвращает новый идентификатор результата, который вы передаёте в mysql_fetch_array() и другие функции, работающие с результирующими таблицами. По окончании работы с результирующим набором вы можете освободить ресурсы, ассоциированные с ним, вызвав mysql_free_result() . В то же время память будет освобождаться автоматически по окончании работы скрипта.

PHP и MySQL

Запросы MySQL с примерами: часть 2.

Введение

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

Теперь мы будем более глубоко изучать запросы MySQL. Итак, приступим!

Создание таблицы — CREATE TABLE

Сейчас у нас пустая база данных, в ней нет таблиц. Поэтому сначала создадим таблицу. Мы уже знаем как это делать из первой части.

Вот код скрипта, который создаст нужную нам табличку:

В нашей таблице только два поля: логин и пароль. Пока что нам больше не нужно, не будем усложнять процесс.

Итак, таблица создана.

Добавление строк (записей) в таблицу — INSERT

Добавить новую строку в таблицу можно при помощи SQL команды insert. Вот пример:

SQL запрос состоит из команды INSERT INTO , имени базы данных users, затем в скобках идут имена полей, потом слово VALUE , после которого в скобках следуют добавляемые значения. Значения берутся в кавычки.

Синтаксис запроса выглядит так:

INSERT INTO имя_таблицы (столбец1, столбец2) VALUE (‘х1’, ‘х2’)

Кавычки во вторых скобках обязательны.

На месте значений могут быть переменные. Вот пример:

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

Существует быстрый способ вставки нескольких строк одним запросом INSERT :

Как видим, перечисляемые данные просто отделены запятыми.

Итак, при помощи команды INSERT мы научились добавлять записи в таблицу. Идём дальше.

Просмотр таблицы: команда SELECT

Теперь у нас есть таблица users, в которой есть строки. Прошлый скрипт можно запустить несколько раз, и каждый раз он будет добавлять строку в таблицу. Теперь мы можем не знать, сколько у нас строк в таблице. А хочется знать что у нас в ней записано.

Для получения данных из таблицы используется SQL-команда SELECT . Знак * обозначает что мы запрашиваем все данные, затем после слова FROM пишем имя таблицы, из которой хотим получить данные.

Запросим все данные из таблицы users:

Функция mysqli_query() вернула нам — мы его помещаем в переменную и в дальнейшем будем работать с ним при помощи других функций PHP.

Число записей в запросе

Давайте определим сколько строк в нашем запросе? Я вот запустил скрипт добавления записи в таблицу сам не помню сколько раз и теперь не знаю сколько строк в моей таблице.

Для определения числа строк в результате запроса используют функцию mysqli_num_rows() . Этой функции передаётся идентификатор результата запроса, а вернёт она число записей.

Если нам нужно узнать число записей в таблице, то приведённый способ не самый подходящий. Тут мы узнали число записей, найденных в запросе, но число записей в таблице ищется по другому.

Число записей в таблице SELECT COUNT(*)

Чтобы узнать число записей в таблице можно воспользоваться командой SELECT COUNT(*) FROM имя_таблицы .

Обратите внимание, тут мы использовали новую функцию PHP mysqli_fetch_row() для получения данных. Эта функция возвращает ряд результата запроса в форме простого массива, в нашем случае в ряду одно поле и оно имеет индес 0.

Просмотр результата запроса в цикле

После выполнения SQL-запроса с командой SELECT и получения идентификатора результата запроса, PHP создаёт в наборе записей результата внутренний указатель. Этот указатель автоматически перемещается на следующую запись, после обращения к текущей записи. Благодаря этому механизму набор результа запроса SELECT очень удобно просматривать в цикле.

В PHP есть несколько функций, при помощи которых можно дла каждой строки результирующего запроса получить массив, состоящий из её полей. Для примера возьмём функцию mysqli_fetch_row() . Этой функции передают идентификатор запроса, а возвращает она массив. Так в цикле просматривается весь результат запроса, по достижению конца результата запроса функция вернёт false .

Итак, запрашиваем все данные из таблицы users ( SELECT * FROM users ).

Функция mysqli_fetch_row() возвращает простой массив. В каждой итерации цикла мы получим массив с строкой из таблицы, доступ к полям которой мы можем получить указав числовой индекс.

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

Также есть функции mysqli_fetch_array() — возвращает любой тип массива, и mysqli_fetch_object() — возвращает объект.

Запрос SELECT DISTINCT — уникальные значения полей

Давайте создадим новую таблицу:

Итак, мы имеем новую, более сложную таблицу с уникальными записями. Сейчас давайте посмотрим, сколько у нас имён в базе данных.

SQL-запрос » SELECT DISTINCT name FROM users » вернул результат со всеми уникальными именами в нашей таблице. Каждое уникальное имя в новой строке результата запроса.

Сортировка результата — ORDER BY

Добавив в SQL-запрос команду ORDER BY мы сортируем результат запроса по возрастанию (цифры и буквы по алфавиту). Вот пример, в котором можно сравнить обычный запрос и отсортированный по возрасту (поле age).

Можете заменить поле age в команде ORDER BY на поле name и посмотреть результат.

Чтобы сортировать результат запроса в обратном порядке используйте команду ORDER BY age DESC .

Соответствие условию — WHERE

Добавив в SQL-запрос команду WHERE мы запросим только те записи, которые соответствуют условию. Например, сделаем запрос на людей младше 30 лет.

Для этого используем SQL-запрос » SELECT * FROM users WHERE age «.

Также мы можем сразу отсортировать результат по возрастанию age:
» SELECT * FROM users WHERE age «.

Если мы сделаем запрос » SELECT name FROM users WHERE age «, то в результате нам вернут только значения поля «name», но они также будут отсортированы по age.

Мы можем запросить значения двух полей: » SELECT name, age FROM users WHERE age «.

Теперь запросим все пользователей, с именем «Max».

И ещё пример запроса , — выберет только имена (name) из таблицы users, все кроме Max.

SELECT name FROM users WHERE name!=’Max’

На этом с запросом WHERE всё.

Ограничение записей — LIMIT

Добавив в SQL-запрос команду LIMIT мы ограничим размер результата.

Запрос, который выводит первые три записи: » SELECT * FROM users LIMIT 3 «. Давайте посмотрим как он работает:

Также тут мы использовали запрос: » SELECT * FROM users LIMIT 3, 3 «. Вторая тройка указывает смещение в результате запроса.

Соответствие шаблону — LIKE

Язык SQL поддерживает простые шаблоны. Для этого используется команда LIKE и шаблон задаётся с использованием символа % .

Вот пример запроса, который вернёт все записи с именами, начинающимися на букву S.

SELECT * FROM users WHERE name LIKE ‘S%’

Вот пример запроса, который вернёт все записи с фамилиями, заканчивающимися на букву s.

SELECT * FROM users WHERE name LIKE ‘%s’

Соответствие условию — IN

Этот запрос с использованием команды IN вернёт только те строки, которые строго соответствую условию.

Например, нас интересуют люди с возрастом 21, 26 и 33 года.

SELECT * FROM users WHERE age IN (21,26,33)

Максимальное и минимальное значение в столбце

Выбирает максимальное значение age в таблице users.

SELECT max(age) FROM users

Следующий запрос выбирает данные из таблицы users по полям name и age где age принимает минимальное значение.

SELECT name, min(age) FROM users

Обновление записи — UPDATE

Давайте Max Lopes установим возраст 15 лет. Это делается запросом MySQL:

UPDATE users SET age=’15’ WHERE name=’Max’ AND surname=’Lopes’

Обратите внимание на новую команду AND (and — по английски значит «и») в запросе. Если мы не уточним фамилию, то возраст 15 лет будет установлен всем Максам в таблице.

Одним запросом можно обновить два и более полей в одной строке. Делается это следующим образом:

UPDATE users SET age = ’18’, surname = ‘Coocker’ WHERE

В нашей таблице нет поля id, так что этот запрос не сработает на ней. Но это поле, содержащее уникальные номера строк, мы обязательно выучим.

Удалить запись — DELETE

Запрос к базе данных MySQL для удаления записи:

DELETE FROM users WHERE

Опять же, в нашей таблице нет поля id. Но мы можем удалить из неё всех людей, младше 18 лет.

DELETE FROM users WHERE age

Удалить таблицу — DROP TABLE

Запрос к базе данных MySQL который удаляет целиком таблицу users:

DROP TABLE users

Удалить столбец — ALTER TABLE . DROP .

Иногда может потребоваться удалить столбец из таблицы, давайте например удалим из users столбец age:

ALTER TABLE users DROP age

Этот запрос MySQL удалил столбец окончательно и безвозвратно.

Добавить столбец — ALTER TABLE . ADD .


Иногда может потребоваться добавить столбец в существующую таблицу, давайте например снова добавим в таблицу users столбец age:

ALTER TABLE users ADD age TINYINT UNSIGNED

Этот запрос MySQL добавил столбец age с типом данных TINYINT UNSIGNED .

Переименование столбца — ALTER TABLE . CHANGE .

Иногда может потребоваться переименовать столбец, например столбец age переименовать в vozrast. Делаем это так:

ALTER TABLE users CHANGE age vozrast TINYINT UNSIGNED

Этот запрос MySQL переименовал столбец age в vozrast с типом данных TINYINT UNSIGNED .

Переименование таблицы — RENAME TABLE . TO .

Иногда может потребоваться переименовать таблицу:

RENAME TABLE users TO peoples

Удаление базы данных — DROP DATABASE

Этот запрос может удалить базу данных с имененм tester:

DROP DATABASE tester

У меня на денвере этот запрос работает, но на хостинге может и не сработать, если у пользователя базы данных нет прав на выполнение удаления.

Создание базы данных — CREATE DATABASE

Этот запрос создаёт базу данных с имененм tester:

CREATE DATABASE tester

У меня на денвере этот запрос работает, но на хостинге может и не сработать, если у пользователя базы данных нет прав на выполнение удаления.

Итоги

Итак, в этой части мы ознакомились с запросами к MySQL. Многие из рассмотренных нами запросов нам не часто пригодятся в процессе работы, но знать их нужно, так как они точно пригодятся в процессе разработки скриптов.

Некоторые запросы обычно делают только из phpMyAdmin (создание и удаление баз данных например).

В работе сайтов обычно нужно добавить запись в таблицу, редактировать запись или удалить запись из таблицы.

Следующим шагом будет изучение типов данных в MySQL.

Примеры SQL запросов к базе данных MySQL

Содержание статьи
1. Самые простые MySQL запросы
2. Простые SELECT (выбрать) запросы
3. Простые INSERT (новая запись) запросы
4. Простые UPDATE (перезаписать, дописать) запросы
5. Простые DELETE (удалить запись) запросы
6. Простые DROP (удалить таблицу) запросы
7. Сложные MySQL запросы
8. MySQL запросы и переменные PHP

1. Самые простые SQL запросы

1. Выведет список ВСЕХ баз.

2. Выведет список ВСЕХ таблиц в Базе Данных base_name.

2. Простые SELECT (выбрать) запросы к базе данных MySQL

SELECT – запрос, который выбирает уже существующие данные из БД. Для выбора можно указывать определённые параметры выбора. Например, суть запроса русским языком звучит так — ВЫБРАТЬ такие-то колонки ИЗ такой-то таблицы ГДЕ параметр такой-то колонки равен значению.

1. Выбирает ВСЕ данные в таблице tbl_name.

2. Выведет количество записей в таблице tbl_name.

3. Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.

4. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.

5. Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.

6. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы users и сортирует их (ORDER BY) по полю id в порядке возрастания, лимит (LIMIT) первые 5 записей.

7. Выбирает все записи из таблицы users, где поле fname соответствует значению Gena.

8. Выбирает все записи из таблицы users, где значение поля fname начинается с Ge.

9. Выбирает все записи из таблицы users, где fname заканчивается на na, и упорядочивает записи в порядке возрастания значения id.

10. Выбирает все данные из колонок fname, lname из таблице users.

Внимание! Старайтесь указывать конкретные колонки (как в примере 10). Это важно для того, чтобы запросы обрабатывались намного быстрее!

11. Допустим у Вас в таблице пользовательских данных есть страна. Так вот если Вы хотите вывести ТОЛЬКО список встречающихся значений (чтобы, например, Россия не выводилось 20 раз, а только один), то используем DISTINCT. Выведет, из массы повторяющихся значений Россия, Украина, Беларусь. Таким образом, из таблицы users колонки country будут выведены ВСЕ УНИКАЛЬНЫЕ значения

12. Выбирает ВСЕ данные строк из таблицы users где age имеет значения 18,19 и 21.

13. Выбирает МАКСИМАЛЬНОЕ значение age в таблице users. То есть если у Вас в таблице самое большее значение age(с англ. возраст) равно 55, то результатом запроса будет 55.

14. Выберет данные из таблицы users по полям name и age ГДЕ age принимает самое маленькое значение.

15. Выберет данные из таблицы users по полю name ГДЕ id НЕ РАВЕН 2.

3. Простые INSERT (новая запись) запросы

INSERT – запрос, который позволяет ПЕРВОНАЧАЛЬНО вставить запись в БД. То есть создаёт НОВУЮ запись (строчку) в БД.

1. Делает новую запись в таблице users, в поле name вставляет Сергей, а в поле age вставляет 25. Таким образом, в таблицу дописывается новая строки с данными значениями. Если колонок больше, то они оставшиеся останутся либо пустыми, либо с установленными по умолчанию значениями.

4. Простые UPDATE запросы к базе данных MySQL

UPDATE – запрос, который позволяет ПЕРЕЗАПИСАТЬ значения полей или ДОПИСАТЬ что-то в уже существующей строке в БД. Например, есть готовая строка, но в ней нужно перезаписать параметр возраста, так как он изменился со временем.

1. В таблице users ГДЕ id равно 3 значение поля age становится 18.

2. Всё то же самое, что и в первом запросе, просто показан синтаксис запроса, где перезаписываются два поля и более.
В таблице users ГДЕ id равно 3 значение поля age становится 18, а country Россия.

5. Простые DELETE (удалить запись) запросы к базе данных MySQL

DELETE – запрос, который удаляет строку из таблицы.

1. Удаляет строку из таблицы users ГДЕ id равен 10.

6. Простые DROP (удалить таблицу) запросы к базе данных MySQL

DROP – запрос, который удаляет таблицу.

1. Удаляет целиком таблицу tbl_name.

7. Сложные запросы к базе данных MySQL

Любопытные запросы, которые могут пригодиться даже опытным пользователям

Данный сложный запрос ВЫБИРАЕТ колонки id,name,country В ТАБЛИЦАХ users,admins ГДЕ registration_date (дата) не старше 14 дней И activation НЕ РАВНО , СОРТИРОВАТЬ по registration_date в обратном порядке (новое в начале).

Выше указан пример так называемого запроса в запросе в SQL. Обновить возраст среди пользователей на 18+, где пол — мужской. Подобные варианты запроса не рекомендую. По личному опыту скажу, лучше создать несколько отдельных — они будут прорабатываться быстрее.

8. Запросы к базе данных MySQL и PHP

В MySQL запросы в PHP странице можно вставлять переменные в качестве сравниваемых и тп значений. Пара примеров

1. Выбирает все записи из таблицы users, где поле fname соответствует значению переменной $name.

2. В таблице users ГДЕ id равно 3 значение поля age изменяется на значение переменной $age.

Внимание! Если Вам интересен какой-либо ещё пример, то пишите вопрос в комментарии!

Как попросить mysql вывести запрос внутри запроса

Не знаю как вывести запрос и внутри тоже запрос и все из одной таблицы. ((

Нужно вывести вначале категорию, а внутри категории наименование всех брендов.
Помогите пожалуйста.

03.02.2020, 21:00

Запрос из запроса PHP + MySQL
Добрый день. нужна помощь с созданием запроса из запроса, что называется. Идея такая. Имеется.

Вывести результат запроса в input из MySQL
Помогите пожалуйста вывести результат запроса в input из mysql. В результате выполнения запроса.

Как попросить mysql вывести запрос внутри запроса
Не знаю как вывести запрос и внутри тоже запрос и все из одной таблицы. (( Нужно вывести вначале.

Запрос внутри запроса
Доброго всем. Какой-то глюк на сайте с загрузкой изображений, прилагаю ссылки на радикал.ру .

Почему висит запрос? План запроса внутри
Добрый день. Прошу помочь разобраться с планом выполнения запроса. select * from ( select /*+.

03.02.2020, 21:15 2

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

лабы по информатике, егэ

лабораторные работы и задачи по программированию и информатике, егэ по информатике

mySQL урок 2. Соединение с базой данных mysql посредством php

Соединение с базой данных посредством php

Соединение с базой данных происходит в 4 этапа:

  1. Открыть соединение с сервером
  2. Выбрать базу данных
  3. Послать запрос базе дынных
  4. Закрытие БД (не всегда)

Рассмотрим на примерах каждый этап отдельно:

Соединение с сервером посредством php

  1. Создание переменной, ассоциирующейся с соединением с сервером mySql:

Функция языка php mysql_connect — открывает соединение с сервером MySQL. Три параметра функции:

  1. «localhost» — сервер, при работе локально указывается значение «localhost»
  2. «root» — имя пользователя, при работе локально обычно указывается «root»
  3. «» — третий параметр — пароль, локально пароль отсутствует

or die (mysql_error())
Функция php mysql_error() возвращает строку ошибки последней операции с MySQL и может быть использована не только при попытке соединения с сервером, но и в других вариантах работы с базой данных mysql

Выбор базы данных mySQL и соединение с ней

Функция php mysql_connect — выбирает базу данных MySQL. Два параметра функции:

  • «db_name» — имя базы данных
  • $conn — указатель на соединение

    Создание запроса к базе данных

    Функция php mysql_query — посылает запрос активной базе данных сервера, на который ссылается переданный указатель. Два параметра функции:

  • $sql — запрос
  • $conn — указатель на соединение

    Обработка результатов запроса к базе mySQL

    Функция php mysql_fetch_array — возвращает массив с обработанным рядом результата запроса или FALSE , если рядов, отвечающих параметрам запроса, нет

    Решение проблем с кодировкой

    $conn = mysql_connect («localhost», «root», «») or die(«Нет соединения: » . mysql_error()); print («Удачно соединено»); mysql_select_db(«institute», $conn); mysql_query(«SET NAMES cp1251»);

    Использование для обработки цикла foreach

    foreach($result as $row)

    $conn = mysql_connect («localhost», «root», «») or die(«Нет соединения: » . mysql_error()); print («Удачно соединено»); mysql_select_db(«institute», $conn); $sql=»SELECT * FROM `teachers` WHERE `name`=’Иванов'» ; $sql= (string) $sql; $result = mysql_query($sql, $conn) or die («no!».mysql_error()); // сохраняем результат в виде массива $row $row=mysql_fetch_array($result); print_r($row);


    Функция print_r() в php предназначена для вывода удобочитаемой информации о переменной

    PHP+Mysql: не работают несколько запросов одновременно?

    Подскажите, пожалуйста, почему в php не работает такой групповой запрос:

    В MySQL всё выполняется без проблем.

    Так же, если в php выполнить по отдельности, то тоже всё выполняется:

    В чем может быть проблема?

    2 ответа 2

    Из комментариев и документации:

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

    Не используйте функции mysql_*, они устарели. Используйте вместо них MySQLi или PDO_MySQL

    Напишу, что для расширения mysql , если движок БД — InnoDB , то можно обернуть всё в одну транзакцию и работать с ней:

    Как уже отмечалось выше:

    Не используйте функции mysql_*, они устарели. Используйте вместо них MySQLi или PDO_MySQL

    И как облегчение: у mysqli есть как раз-таки функция для множественных запросов. Примитивный пример:

    Два и более запроса, за один вызов mysql_query() как?

    Digitalator

    Guest

    Два и более запроса, за один вызов mysql_query() как?

    Попытка выполнить запрос типа
    [sql]
    SELECT * FROM table1 WHERE 1 ORDER BY col1 LIMIT 1,25; UPDATE table2 SET col2=2 WHERE col1=1;[/sql]
    приводит к ошибке

    Новичок

    >но необходимо чтоб запросы выполнялись в одном вызове mysql_query

    Это не необходимо. Можно прекрасно без этого обойтись.

    Старожил PHPClub

    phpmyadmin разбивает твой запрос на отдльные запросы и по очереди выполняет их через mysql_query

    PS
    поиск по слову gandon поможет. Я серьезно

    Digitalator

    Guest

    Нет, там не то что мне нужно — не должно быть доп. скриптов.
    Хорошо, тогда другой вопрос — возможно ли вообще выполянть 2 и более запроса в mysql_querry() ?

    Новичок

    tony2001

    TeaM PHPClub

    >Хорошо, тогда другой вопрос — возможно ли вообще выполянть 2 и более запроса в mysql_querry() ?
    нет

    >в данном случае я не могу вызвать mysql_query() более одного раза.
    значит, твоя задача невыполнима.

    chira

    Новичок

    Cougar

    Кошак
    Старожил PHPClub
    . двинутый новичок

    Вообще, строго говоря, ни одна СУБД не «выполняет» несколько запросов в рамках одного пакета.

    Дело в том, что обработка одного запроса это довольно сложная процедура. Ведь жизненный цикл одного запроса подразумевает разбор, оптимизацию (возможно, в несколько проходов), анализ и построение плана выполнения (plan analyzer) и только потом поиск и операции с данными.

    Соответственно, если бы существовала возможность выполнения почти неограниченного числа последовательных запросов как одного — то как должен быть реализован analyzer и оптимизатор ? Для подобных вещей, в частности, придумали механизм транзакций. В MySQL (3.x) все транзакции — на атомарном уровне, т.е. на уровне одной записи. Т.е. если ты выполняешь подряд 25 запросов типа INSERT, это 25 атомарных транзакций.

    mysql_query

    mysql_query — Посылает запрос MySQL

    Данное расширение устарело, начиная с версии PHP 5.5.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 .

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

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

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

    // Эти данные, к примеру, могли быть получены от пользователя
    $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_connect() — Открывает соединение с сервером MySQL
    • mysql_error() — Возвращает текст ошибки последней операции с MySQL
    • mysql_real_escape_string() — Экранирует специальные символы в строках для использования в выражениях SQL
    • mysql_result() — Возвращает данные результата запроса
    • mysql_fetch_assoc() — Возвращает ряд результата запроса в качестве ассоциативного массива
    • mysql_unbuffered_query() — Посылает запрос MySQL без авто-обработки результата и его буферизации

    Коментарии

    When trying to INSERT or UPDATE and trying to put a large amount of text or data (blob) into a mysql table you might run into problems.

    In mysql.err you might see:
    Packet too large (73904)

    To fix you just have to start up mysql with the option -O max_allowed_packet=maxsize

    You would just replace maxsize with the max size you want to insert, the default is 65536

    One way to reduce the dangers of queries like the dlete command above that dletes the whole DB is to use limits wherever possible.

    EG. If you have a routine that is only deisnged to delete 1 record, add ‘LIMIT 1’ to the end of the command. This way you’ll only lose one record if someone does something stupid.

    You should also check all input, especially if it is sent using GET. ie. make sure that $_GET[‘ , is a number that is positive, not 0 (generally, I know this doesn’t apply to some table types, but it applies to the default) and is within the valid range for that field.

    Just don’t trust ANY data that is sent to your script.

    Regarding the idea for returning all possible values of an enum field, the mySQL manual says that «SHOW COLUMNS FROM table LIKE column» should be used to do this.

    The function below (presumes db connection) will return an array of the possible values of an enum.

    function GetEnumValues($Table,$Column)
    <
    $dbSQL = «SHOW COLUMNS FROM «.$Table.» LIKE ‘».$Column.»‘»;
    $dbQuery = mysql_query($dbSQL);

    $dbRow = mysql_fetch_assoc($dbQuery);
    $EnumValues = $dbRow[«Type»];

    $EnumValues = substr($EnumValues, 6, strlen($EnumValues)-8);
    $EnumValues = str_replace(«‘,'»,»,»,$EnumValues);

    1) If the LIKE matches more than one column you get the enum from the first, so be careful with the $Column argument
    2) You can’t have ‘,’ as part of one of the enums (I guess mySQL would escape this, but I haven’t tried)
    3) If the field isn’t an enum you’ll get garbage back!

    This is just a quick example to show how to do it, some tidying up needs to be done (ie checking if the field is actually an enum) before it is perfect.

    If you need to execute sevaral SQL commands in a row (usually called batcg SQL) using PHP you canot use mysql_query() since it can execute single command only.

    Here is simple but effective function that can run batch SQL commands. Take cere, if string contains semicolon (;) anywhere except as command delimiter (within string expression for example) function will not work.

    function mysql_exec_batch ($p_query, $p_transaction_safe = true) <
    if ($p_transaction_safe) <
    $p_query = ‘START TRANSACTION;’ . $p_query . ‘; COMMIT;’;
    >;
    $query_split = preg_split («/[;]+/», $p_query);
    foreach ($query_split as $command_line) <
    $command_line = trim($command_line);
    if ($command_line != ») <
    $query_result = mysql_query($command_line);
    if ($query_result == 0) <
    break;
    >;
    >;
    >;
    return $query_result;
    >

    I think it’s important to note (for newbies, like me especially) that an empty result is not the same as an error:
    /* ‘bar’ is an empty table in the db */
    $rs = mysql_query ( «SELECT `foo` FROM `bar`» )
    if( $rs ) <
    echo mysql_num_rows ( $rs ); //outputs: 0
    >

    /* malformed query /*
    $rs = mysql_query(«SELECT `foo` FRO `bar`»);
    if($rs) <
    echo «This will never be echoed»;
    >
    ?>

    here’s a script for parsing a *.sql file (tested only on dumps created with phpMyAdmin) which is short and simple (why do people say «here’s a short and simple script» and it has a 100 lines?). the script skips comments and allows ; to be present within the querys

    function parse_mysql_dump ( $url ) <
    $file_content = file ( $url );
    $query = «» ;
    foreach( $file_content as $sql_line ) <
    if( trim ( $sql_line ) != «» && strpos ( $sql_line , «—» ) === false ) <
    $query .= $sql_line ;
    if( preg_match ( «/;[\040]*\$/» , $sql_line )) <
    $result = mysql_query ( $query )or die( mysql_error ());
    $query = «» ;
    >
    >
    >
    >
    ?>

    I believe there is a typo in celtic at raven-blue dot com version with:

    if (($sql != «») && (substr($tsl, 0, 2) != «—«) && (substr($tsl, 0, 1) != «#»)) <

    I think you really ment:

    if (($tsl != «») && (substr($tsl, 0, 2) != «—«) && (substr($tsl, 0, 1) != «#»)) <

    I changed the $sql to $tsl

    If, like me, you come from perl, you may not like having to use sprintf to ‘simulate’ placeholders that the DBI package from perl provides. I have created the following wrapper function for mysql_query() that allows you to use ‘?’ characters to substitute values in your DB queries. Note that this is not how DBI in perl handles placeholders, but it’s pretty similar.

    // mysql_query() wrapper. takes two arguments. first
    // is the query with ‘?’ placeholders in it. second argument
    // is an array containing the values to substitute in place
    // of the placeholders (in order, of course).
    function mysql_prepare ( $query , $phs = array()) <
    foreach ( $phs as $ph ) <
    $ph = «‘» . mysql_real_escape_string ( $ph ) . «‘» ;
    $query = substr_replace (
    $query , $ph , strpos ( $query , ‘?’ ), 1
    );
    >

    return mysql_query ( $query );
    >

    // sample usage
    list( $user , $passwd ) = array( ‘myuser’ , ‘mypass’ );

    $sth = mysql_prepare (
    ‘select user > ,
    array( $user , sha1 ( $passwd ))
    );
    $row = mysql_fetch_row ( $sth );

    // oops, wrong userid or passwd
    else <
    echo «Invalid username and password combination.\n» ;
    >
    ?>

    Here’s a parameterised query function for MySQL similar to pg_query_params, I’ve been using something similar for a while now and while there is a slight drop in speed, it’s far better than making a mistake escaping the parameters of your query and allowing an SQL injection attack on your server.

    # Parameterised query implementation for MySQL (similar PostgreSQL’s PHP function pg_query_params)
    # Example: mysql_query_params( «SELECT * FROM my_table WHERE col1=$1 AND col2=$2», array( 42, «It’s ok» ) );

    if( ! function_exists ( ‘mysql_query_params’ ) ) <

    function mysql_query_params__callback ( $at ) <
    global $mysql_query_params__parameters ;
    return $mysql_query_params__parameters [ $at [ 1 ]- 1 ];
    >

    function mysql_query_params ( $query , $parameters =array(), $database = false ) <

    // Escape parameters as required & build parameters for callback function
    global $mysql_query_params__parameters ;
    foreach( $parameters as $k => $v )
    $parameters [ $k ] = ( is_int ( $v ) ? $v : ( NULL === $v ? ‘NULL’ : «‘» . mysql_real_escape_string ( $v ). «‘» ) );
    $mysql_query_params__parameters = $parameters ;


    // Call using mysql_query
    if( false === $database )
    return mysql_query ( preg_replace_callback ( ‘/\$([0-9]+)/’ , ‘mysql_query_params__callback’ , $query ) );
    else return mysql_query ( preg_replace_callback ( ‘/\$([0-9]+)/’ , ‘mysql_query_params__callback’ , $query ), $database );

    this could be a nice way to print values from 2 tables with a foreign key. i have not yet tested correctly but it should work fine.

    $buscar = mysql_query(«SELECT k.*, e.Clasificacion FROM cat_plan_k k, cat_equipo e WHERE Tipo=’$tipo’ AND k. > while ($row=mysql_fetch_array($buscar))
    <
    $nombre = «e.Clasificacion»;
    $row[$nombre] = $Clasific; echo $row[$nombre].’convertido en ‘.$Clasific;
    >
    mysql_free_result($buscar);

    Simulating an atomic operation for application locks using mysql.

    $link = mysql_connect(‘localhost’, ‘user’, ‘pass’);
    if (!$link) <
    die(‘Not connected : ‘ . mysql_error());
    >

    // make foo the current db
    $db_selected = mysql_select_db(‘foo’, $link);
    if (!$db_selected) <
    die (‘Can\’t use foo : ‘ . mysql_error());
    >

    $q = «update `table` set `LOCK`=’F’ where ` «;
    $lock = mysql_affected_rows();

    If we assume
    NOT LOCKED = «» (empty string)
    LOCKED = ‘F’

    then if the column LOCK had a value other than F (normally should be an empty string) the update statement sets it to F and set the affected rows to 1. Which mean than we got the lock.
    If affected rows return 0 then the value of that column was already F and somebody else has the lock.

    The secret lies in the following statement taken from the mysql manual:
    «If you set a column to the value it currently has, MySQL notices this and does not update it.»

    Of course all this is possible if the all application processes agree on the locking algorithm.

    mysql_query doesnt support multiple queries, a way round this is to use innodb and transactions

    this db class/function will accept an array of arrays of querys, it will auto check every line for affected rows in db, if one is 0 it will rollback and return false, else it will commit and return true, the call to the function is simple and is easy to read etc
    ———-

    class MySQLDB
    <
    private $connection; // The MySQL database connection

    /* Class constructor */
    function MySQLDB() <
    /* Make connection to database */
    $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
    mysql_select_db(DB_NAME, $this->connection) or die(mysql_error());
    >

    function begin() <
    $null = mysql_query(«START TRANSACTION», $this->connection);
    return mysql_query(«BEGIN», $this->connection);
    >

    function commit() <
    return mysql_query(«COMMIT», $this->connection);
    >

    function rollback() <
    return mysql_query(«ROLLBACK», $this->connection);
    >

    function transaction($q_array) <
    $retval = 1;

    foreach($q_array as $qa) <
    $result = mysql_query($qa[‘query’], $this->connection);
    if(mysql_affected_rows() == 0)< $retval = 0; >
    >

    if($retval == 0) <
    $this->rollback();
    return false;
    >else <
    $this->commit();
    return true;
    >
    >

    /* Create database connection object */
    $database = new MySQLDB;

    // then from anywhere else simply put the transaction queries in an array or arrays like this:

    function function() <
    global $database;

    $q = array (
    array(«query» => «UPDATE table WHERE something = ‘something'»),
    array(«query» => «UPDATE table WHERE something_else = ‘something_else'»),
    array(«query» => «DELETE FROM table WHERE something_else2 = ‘something_else2′»),
    );

    Keep in mind when dealing with PHP & MySQL that sending a null-terminated string to a MySQL query can be misleading if you use echo($sql) in PHP because the null terminator may not be visible.

    For example (this assumes connection is already made),
    $string1 = «mystring\0»;
    $string2 = «mystring»;

    $query1 = «SELECT * FROM table WHERE mystring='».$string1.»‘»
    $query2 = «SELECT * FROM table WHERE mystring='».$string2.»‘»

    //$result1 IS NOT EQUAL TO $result2 but will not provide an error

    //but printing these queries to the screen will provide the same result
    echo($result1);
    echo($result2);

    Not knowing this could lead to some mind-numbing troubleshooting when dealing with any strings with a null terminator. So now you know! :)

    For all you programmers out there getting the ‘Command out of synch’ errors when executing a stored procedure call:

    There are known bugs related to this issue, and the best workaround for avoiding this error seems to be switching to mysqli.

    Still, I needed mysql to also handle these calls correctly.
    The error is normally related to wrong function call sequences, though the bug report at http://bugs.php.net/bug.php? >
    For me, after commenting out hundreds of lines and several introspection calls to parse the procedure information (using information_schema and ‘SHOW’ extensions), I still got the same error.
    The first result is returned, because I initiated my connection using the MYSQL_MULTI_RESULTS value of 131072 (forget this and you will never get any output, but an error message stating mysql cannot return results in this context)

    After testing with this code (sproc2 simply calls ‘SELECT * FROM sometable’), I found the error must be in the mysql library/extension. Somehow, mysql does not handle multiple resultsets correctly, or is at least missing some functionality related to handling multiple results.

    //.
    $rs = mysql_query ( ‘CALL sproc2(500)’ );
    while (( $row = mysql_fetch_assoc ( $rs ))!== false ) <
    print_r ( $row );
    >
    mysql_free_result ( $rs );

    $rs = mysql_query ( ‘CALL sproc2(500)’ );
    print mysql_error (); //the notorious ‘command out of synch’ message :(
    while (( $row = mysql_fetch_assoc ( $rs ))!== false ) <
    print_r ( $row );
    >
    mysql_free_result ( $rs );
    ?>

    After spending hours debugging my code (the full library is already over the MB), the only solution seemed to be to CLOSE the connection after the first call, and reopening it before the second.

    So if you ever make a uniform database accessing interface and implement stored procedures/prepared statements (or classes for it), this could be a solution if you really wish to enable stored procedures.

    Still, be aware that this is really a serious flaw in your design (and IMHO, the mysql extension)

    Also see the documentation for mysqli on mysqli_query, which seems to be working fine.

    Dunno if is it a bug but when you are working with replications servers and work with multiple databases queries if you don’t select the database it will only insert,update,delete into the master and bypass the slave, I think it its because it doesn’t insert the sql on the binary log so the work around its to just call mysql_select_db
    MYSQL : 5.0.51a-log
    PHP: 5.2.6
    Example:
    #Inserts only to master
    $link = mysql_connect ( ‘host’ , ‘user’ , ‘pass’ );
    $sql = «INSERT INTO mysql.host (host) VALUES (‘localhost’);»
    var_dump ( mysql_query ( $sql , $link ));

    #The Working Way Master — Slave
    $link2 = mysql_connect ( ‘host’ , ‘user’ , ‘pass’ );
    $select_db = mysql_select_db ( ‘mysql’ , $link2 );
    var_dump ( mysql_query ( $sql , $link2 ));
    ?>

    It should be noted that mysql_query can generate an E_WARNING (not documented). The warning that I hit was when the db user did not have permission to execute a UDF.

    Expected behavior would be like an Invalid SQL statement, where there is no E_WARNING generated by mysql_query.

    Warning: mysql_query() [function.mysql-query]: Unable to save result set in filename.php

    The mysql_errno is 1370 and the mysql_error is:

    execute command denied to user ‘username’@’%’ for routine ‘database_name.MyUDF’

    When you run a select statement and receive a response, the data types of your response will be a string regardless of the data type of the column.

    // Query to select an int column
    $query = ‘SELECT user_ > ;
    $result = mysql_query ( $query );
    $array = mysql_fetch_assoc ( $result );

    // Echoes: string
    echo gettype ( $array [ ‘user_id’ ]);
    ?>

    For those of you whom spent hours bashing your brains against the keyboard wondering why your non-English characters are output as question marks. Try the following:

    = mysql_connect ( ‘YOUR_DB_ADDRESS’ , ‘YOUR_DB_USER’ , ‘YOUR_DB_PASS’ ) or die( «Database error» );
    mysql_select_db ( ‘YOUR_DB’ , $db );

    //SOLUTION:: add this comment before your 1st query — force multiLanuage support
    $result = mysql_query ( «set names ‘utf8′» );

    $query = «select * from YOUR_DB_TABLE» ;
    $result = mysql_query ( $query );

    ?>

    Simply run the query «set names ‘utf8’ » against the MySQL DB and your output should appear correct.

    Use this to neatly insert data into a mysql table:

    function mysql_insert ( $table , $inserts ) <
    $values = array_map ( ‘mysql_real_escape_string’ , array_values ( $inserts ));
    $keys = array_keys ( $inserts );

    return mysql_query ( ‘INSERT INTO `’ . $table . ‘` (`’ . implode ( ‘`,`’ , $keys ). ‘`) VALUES (\» . implode ( ‘\’,\» , $values ). ‘\’)’ );
    >
    ?>

    For example:

    ( ‘cars’ , array(
    ‘make’ => ‘Aston Martin’ ,
    ‘model’ => ‘DB9’ ,
    ‘year’ => ‘2009’ ,
    ));
    ?>

    I much prefer to use the same syntax for single INSERT, REPLACE and UPDATE queries as it is easier to read and keeps my code shorter (no seperate building of insert and update values)

    INSERT INTO table SET x=’1′, y=3
    UPDATE table SET x=’2′ WHERE y=3

    So if your using a function to build your query, you will only ever need to code the «field=value, field2=value2» part for any query.

    This project implements a wrapper to mysql functions in PHP7.0+

    Mysql_query — Посылает запрос MySQL

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

    Создание БД MySQL

    Чтобы создать новую базу данных, нам необходим PhpMyAdmin. Если вы будете тестировать скрипты на локальном сервере, то создание БД не вызовет каких либо проблем. Набрав в адресной строке http://127.0.0.1/phpmyadmin, вы попадает в главное меню управления базами.

    Указываете имя базы данных на латинице, в качестве «Сравнения» указываете utf8_unicode_ci и нажимаем кнопку создать. После перезагрузки страницы мы попадаем в нашу базу данных. В скобках указано количество таблиц в базе.

    На предыдущем скриншоте мы видим главное меню, в котором мы можем создать таблицу внутри базы данных. Для чего нужна таблица и что это такое? Таблица состоит из полей, вспомните например Microsoft Excel , там все рабочее поле разбито на ячейки. Например вы создаете таблицу, в которой создаете прайс техники

    В ней вы указываете имя колонки (товар, описание, цена) и далее забиваете информацию. Очень похожий принцип и у таблиц MySQL. Я специально создал таблицу notebook, и продублировал туда все значения, вот что получилось:

    Как вы видите у каждого столбца есть свое описание (id, model, price), они играют очень важную роль. В своих запросах мы будем выбирать нужные данные, удовлетворяющие каким либо условиям.

    Повторите мой вариант. Создайте таблицу с именем notebook, введите количество полей 3 и нажмите ОК. После нажатия кнопки, вы попадаете в следующее меню, где необходимо задать имя полей таблицы и выбрать тип данных, которые будут в них содержаться.

    Перед вами будут несколько полей, каждое из которых, будет иметь свое предназначение и хранить определенный тип данных.

    Первое поле у нас будет носить имя столбца, в качестве первого будет id – идентификатор товара. Он необходим для совершения каких либо действий с этим товаром (редактирование или удаление). Далее указываем Тип. Т.к. идентификатор будет числовой, то тип данных принимает значение INT или INTEGER (ЦЕЛОЕ ЧИСЛО). Далее вводим Длина/значение, указываем 5 (5 это не значит что максимальное количество будет 5, а то что значение будет не более 99999, я думаю этого хватит для начала). Далее идет поле сравнение, в нем необходимо указать в какой кодировке будут храниться данные. Для поля id мы оставляем значение по умолчанию. Атрибуты пропускаем. Далее переходим к полю По умолчанию и ставим значение единицу, это будет означать что первый товар будет начинаться с единицы. Переходим к Дополнительно и выставляем атрибут auto_increment. Это позволяет при добавлении новой записи, автоматически присваивать идентификатор товару, причем не случайным образом, а в порядке возрастания.

    Переходим к заполнению поля model. Тип мы выставим VARCHAR. VARCHAR (ПЕРЕМЕННОЕ ЧИСЛО СИМВОЛОВ), этот тип является текстовой строкой и может иметь любую длину до определённого реализацией максимума (обычно 254 символа). Для описания модели нам хватит длины строки в 200 символов, которые мы указываем в поле длина.

    Далее переходим к полю price. Здесь тип переменных будет выражен числами, поэтому тип данных устанавливаем INT, и длину значения 5.

    Ниже выставляем Тип таблиц – MyISAM, сравнение – utf8_unicode_ci и нажимаем кнопку сохранить. Если все значения были введены правильно то появиться окно, с выполненым запросом, структура таблицы и в левом меню вы увидите вашу новую таблицу notebook.

    На этом этап создания таблицы завершен, переходим к программированию.

    Подключение к БД MySQL

    Чтобы выполнять запросы к базе нам необходимо к ней подключиться и выбрать таблицу . Это достаточно просто и выполняется при помощи 2 стандартных функций.
    mysql_connect — Открывает соединение с сервером MySQL

    mysql_select_db — Выбирает базу данных MySQL

    Функция mysql_select_db вызывается только после функции mysql_connect. Для того чтобы подключиться и выбрать базу test, мы берем второй фрагмент кода. Этот фрагмент мы будем использовать в каждом скрипте, где необходима работа с mysql.

    Чтобы создать запись в БД необходимо сформировать запрос, который будет вставлять значения в таблицу. Создаем новый файл в php expert editor‘е, вставляем фрагмент кода приведенный выше, который отвечает за подключение к БД и выбора нужной таблицы.

    Давайте разберем то, что мы присвоили переменной $query. Транскрипция запроса выглядит следующим образом:

    $query = «INSERT(ВСТАВИТЬ) INTO (КУДА/В) ‘notebook’ VALUES()ЗНАЧЕНИЯ(Значение 1го поля,значение 2го поля,значение 3го поля)»;

    Обратите внимание на первое значение в скобках после VALUES. Мы указали тип переменной NULL, это значит что в это поле ничего записываться не будет. Вот так просто мы разобрали с вами запрос, что делать дальше?!

    Далее есть функция, которая отвечает за выполнение запроса, и возвращает результат. Это функция
    mysql_query — Посылает запрос MySQL

    200?’200px’:»+(this.scrollHeight+5)+’px’);»> $result = mysql_query($query);

    В нашем случае переменная $result будет содержать результат данного запроса. В конце мы добавим простое условие, которое укажет нам об успешном или неуспешном выполнении запроса.
    Итог можете посмотреть при помощи PhpMyAdmin, перейдя в таблицу notebook и нажав вкладку Обзор

    Чтобы извлечь данные из базы, нам необходимо составить другой запрос, но прежде чем это сделать запишите в вашу таблицу несколько разных значений, пусть это будут разные модели ноутбуков с разными ценниками.

    Для начала сделаем выборку всех ноутбуков с ценниками и выведем их в браузер. Для этого составляем следующий запрос:

    десь все достаточно просто:

    Т.е. выбираем все столбцы из таблицы ноутбук. Далее осуществляем запрос:

    echo «$r[model] — $r[price]
    «;

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

    Давайте теперь добавим условие, например вывести ноутбуки, цена которых превышает 30 000. Сделать это можно двумя способами. Можно просто внутри цикла while вставить условие

    Такое условие будет обрабатывать уже полученные данные из базы, но можно пойти другим путем – создать условие при запросе к базе.

    Предыдущий фрагмент кода остается без изменений, меняется лишь только запрос:

    Mysql_query — Посылает запрос MySQL

    mysql_query — Посылает запрос MySQL

    Описание resource mysql_query ( string query [, resource link_identifier [, int result_mode]])

    mysql_query() посылает запрос активной базе данных на сервер, связанный с идентификатором. Если link_identifier не указан, то используется последнее открытое соединение. Если ни одно соединение ранее не установлено, то функция пытается создать его с помощью вызова функции mysql_connect() с аргументами, установленными по умолчанию.

    Необязательный параметрl result_mode может принимать значения MYSQL_USE_RESULT и MYSQL_STORE_RESULT. По умолчанию используется MYSQL_STORE_RESULT, таким образом результат кешируется. Смотрите также mysql_unbuffered_query() .

    Примечание: Строка запроса не должна заканчиваться точкой с запятой.

    Только для операторов SELECT, SHOW, EXPLAIN и DESCRIBE mysql_query() возвращает идентификатор результата или FALSE , если запрос не выполнен. Для других типов операторов SQL mysql_query() возвращает TRUE в случае успеха и FALSE при возникновении ошибки. Если возвращено значение, не равное FALSE , то запрос верен и может быть исполнен сервером. Это никоим образом не сигнализирует о числе возвращенных записей. Это возмножно также и для успешно выполненного запроса, который не возвратил никаких записей.

    Следующий запрос неверен с точки зрения синтаксиса MySQL, и mysql_query() возвращает FALSE :

    Пример 1. mysql_query()

    Следующий запрос неверен с точки зрения семантики языка в случае, если my_col не является колонкой таблицы my_tbl , поэтому mysql_query() возвращает FALSE :

    Пример 2. mysql_query()

    mysql_query() также возвратит FALSE и выведет сообщение об ошибке, если вы не имеете доступа к таблице, на которую ссылается запрос.

    Предполагая, что запрос выполнен, вы можете использовать mysql_num_rows() для нахождения числа возвращенных записей для оператора SELECT или mysql_affected_rows() для нахождения числа задействованных записей операторами DELETE, INSERT, REPLACE или UPDATE.

    Только для операторов SELECT,SHOW,DESCRIBE or EXPLAIN, mysql_query() возвращает новый идентификатор результата, который вы можете использовать функцией mysql_fetch_array() и другими. Когда вы выполнили операции с результатом, вы можете освободить ресурсы, связанные с ним, с помощью вызова mysql_free_result() . Хотя память будет освобождена также по окончании исполнения скрипта.

    Смотрите также: mysql_num_rows() , mysql_affected_rows() , mysql_unbuffered_query() , mysql_free_result() , mysql_fetch_array() , mysql_fetch_row() , mysql_fetch_assoc() , mysql_result() , mysql_select_db() и mysql_connect() .

    Если вы заметили ошибку, неточность, либо хотите опубликовть свой перевод неуказанных в разделе функций, пожалуйста, напишите по этому адресу.

    Илон Маск рекомендует:  Что такое код asp hcminfilesizeforcomp
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL