Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Функции получения информации о результатах SQL-запросов



PHP предоставляет еще несколько полезных функций, которые позволяют узнать информацию о результах SQL-запросов.

· Функция mysql_field_name(int $result, int $offset) возвращает имя поля, находящегося в результате $result с номером $offset (нумерация начинается с 0). Другими словами, функция возвращает имя поля с номером $offset.

· Функция mysql_field_type(int $result, int $offset) возвращает тип поля с номером $offset в результате $result (номер задается относительно результата, а не таблицы);

· Функция mysql_field_flags(int $result, int $offset) возвращает пречисленные через пробел флаги (модификаторы), которые имеются у поля с номером $offset. Все поддерживаемые MySQL флаги:

 

Флаг Описание
not_Null Поле не может содержать неопределенного значения (NULL), то есть поле должно быть явно инициализировано
Primary_Key Поле будет первичным ключом - идентификатором записи, по которому можно однозначно идентифицировать запись;
auto_increment При вставке новой записи значение этого поля будет автоматически увеличено на единицу, потому в таблице никогда не будет двух записей с одинаковым значением этого поля;
Unique_Key Поле должно содержать уникальное значение;
Multiple_Key Индекс
Blob Поле может содержать бинарный блок данных
Unsigned Поле содержит беззнаковые числа
Zerofill Вместо пробелов используются символы с кодом \0
Binary Поле содержит двоичные данные
enum Поле может содержать один элемент из нескольких возможных (элемент перечисления)
timestamp В поле автоматически заносится текущая дата и время при его модификации

 

Функция mysql_field_flags() возвращает флаги в виде строки, в которой флаги разделяются пробелами.

 

Практическая часть

Порядок выполнения работы

1) Создать скрипт, который выбирает и выводит все данные из одной таблицы с помощью функции mysql_fetch_row().

2) Создать скрипт, который выбирает и выводит данные из нескольких таблиц с помощью функции mysql_fetch_array().

3) Создать скрипт, который получает информацию о полях одной таблицы.

3. Контрольные вопросы

1) С помощью какой функции отправляются запросы к выбранной базе данных?

2) Какие функции используются для обработки результатов запроса?

3) В чем отличие функций mysql_fetch_array() и mysql_fetch_assoc()?

4) Какие функции используются для подключения информации о результатах запросов?

 

Лабораторная работа 18

Создание БД с помощью языка PHP. Типы данных MySQL. PearDB

Цель работы: формирование навыков работы с функциями PHP для MySQL.

 

Типы данных MySQL

Числовые типы

Если для целочисленных типов определен атрибут auto_increment, столбец должен иметь индекс PRIMARY KEY или unique. Вставка значения null в столбец auto__increment приводит к получению значения, а единицу большего максимального текущего значения столбца. Определение атрибута UNSIGNED запрещает ввод для числовых типов отрицательных значений.

При определении атрибута zerofill значения числовых типов дополняются нулями для достижения установленной ширины отображения столбца.

TINYINT[(М)]

Описание: очень малое целое.

Допустимые атрибуты: auto_increment, unsigned, zerofill.

Диапазон: от -128 до 127 (от -27 до 27-1) или от 0 до 255 (от 0 до 28-1), если UNSIGNED.

Значение по умолчанию: NULL, если столбец может иметь значение NULL, 0, если NOT NULL.

Объем: 1 байт.

 

SMALLINT[(М)]

Описание: малое целое.

Допустимые атрибуты: auto_increment, unsigned, zerofill.

Диапазон: от -32768 до 32767 (от -215 до 215-1) или от 0 до 65535 (от 0 до 216-1), если UNSIGNED.

Значение по умолчанию: NULL, если столбец может иметь значение NULL, 0, если NOT NULL.

Объем: 2 байта.

 

MEDIUMINT[(М)]

Описание: целое среднего размера.

Допустимые атрибуты: auto_increment, unsigned, zerofill.

Диапазон: от -8388608 до 8388607 (от -223 до 231-1) или от 0 до 16777215 (от 0 до 224-1), если unsigned.

Значение по умолчанию: NULL, если столбец может иметь значение NULL, 0, если NOT NULL.

Объем: 3 байта.

 

INT[(М)]

Описание: целое нормального размера.

Допустимые атрибуты: AUTO_INCREMENT, UNSIGNED, ZEROFILL.

Диапазон: от -2147483648 до 2147483647 (от -2м до 231-1) или от 0 до 4294967295 (от 0 до 2" -1), если UNSIGNED.

Значение по умолчанию: NULL, если столбец может иметь значение NULL, 0, если NOT NULL.

Объем: 4 байта.

Синоним: integer [(М)].

 

BIGINT [(M)]

Описание: большое целое.

Допустимые атрибуты: auto_increment, unsigned, zerofill.

Диапазон: от -9223372036854775808 до 9223372036854775807 (от -2м до 263-1) или от 0 до 18446744073709551615 (от 0 до 264-1), если UNSIGNED.

Значение по умолчанию: null, если столбец может иметь значение NULL, 0, если NOT NULL.

Объем: 8 байт.

 

FLOAT [(M, D)]

Описание: малое число с плавающей запятой; одинарная точность (менее точный тип, чем DOUBLE).

Допустимые атрибуты: zerofill.

Диапазон: минимальные ненулевые значения — ±1, 175494351Е-38; максимальные ненулевые значения — ±3, 402823466Е+38.

Значение по умолчанию: null, если столбец может иметь значение

NULL, 0, если NOT NULL.

Объем: 4 байта.

Синоним: в версиях, предшествующих MySQL 3.23, float D) — синоним для FLOAT со значениями М и D по умолчанию.

Замечание: начиная с версии MySQL 3.23, FLOAT D) — действительный тип числа с плавающей запятой (значения сохраняются с максимальной точностью, разрешенной аппаратными средствами и не округляются до определенного числа знаков после запятой).

 

DOUBLE [(M, D)]

Описание: большое число с плавающей запятой; двойная точность (более точный тип, чем float).

Допустимые атрибуты: ZEROFILL.

Диапазон: минимальные ненулевые значения — ±2, 2250738585072014Е-308; максимальные ненулевые значения — ±1, 7976931348623157Е+308.

Значение по умолчанию: null, если столбец может иметь значение NULL, 0, если NOT NULL.

Объем: 8 байт.

 

Строковые типы

Наиболее часто используются следующие:

VARCHAR(M)

Описание: строка переменной длины от 0 до М символов. Аргумент М должен быть целочисленным значением от 1 до 255 (в версиях до MySQL 3.23) и от 0 до 255 (в версиях MySQL 3.23 и выше). Замыкающие пробелы при считывании строки удаляются. Если длина строки превышает М символов, лишние символы при записи удаляются.

Допустимые атрибуты: binary.

Допустимая длина: от 0 до М байт.

Значение по умолчанию: null, если столбец может иметь значение NULL, " ", если NOT NULL.

Объем: длина значения плюс 1 байт для записи длины.

Сравнение: регистр символов не учитывается (учитывается, если BINARY).

 

TEXT

Описание: значение TEXT нормального размера.

Допустимые атрибуты: только глобальные атрибуты.

Допустимая длина: от 0 до 65535 (от 0 до 21б-1) байт.

Значение по умолчанию: null, если столбец может иметь значение NULL, " ", если NOT NULL.

Объем: длина значения плюс 2 байта для записи длины.

Сравнение: регистр символов не учитывается.

 

ENUM(" valuel", " value2",...)

Описание: перечень; значениям столбцов может присваиваться одно из значений списка.

Допустимые атрибуты: только глобальные атрибуты.

Значение по умолчанию: NULL, если столбец может иметь значение NULL, первое значение списка, если not null.

Объем: 1 байт для перечня с числом членов от 1 до 255, 2 байта для перечня с числом членов от 256 до 65535.

Сравнение: регистр символов не учитывается (учитывается в версиях до MySQL 3.22.1).

Типы даты и времени

DATE

Описание: дата, представленная в формате " YYYY-MM-DD".

Допустимые атрибуты: только глобальные атрибуты.

Диапазон: от 1000-01-01" до " 9999-12-31".

Нулевое значение: 0000-00-00".

Значение по умолчанию: NULL, если столбец может иметь значение NULL, 0000-00-00", если NOT NULL.

Объем: 3 байта D байта в версиях, предшествующих MySQL 3.22).

 

TIME

Описание: значение времени, представленное в формате " чч.мм.сс" (" - чч: мм: сс" для отрицательных значений). Это значение отражает истекшее время, однако может устанавливаться и как суточное время.

Допустимые атрибуты: только глобальные атрибуты.

Диапазон: ОТ " -838: 59: 59" ДО " 838-59-59".

Нулевое значение: 00: 00: 00".

Значение по умолчанию: NULL, если столбец может иметь значение NULL, 0000.00", если NOT NULL.

Объем: 3 байта.

Замечание: хотя значение 0: 00: 00" используется как нулевое при вставке недопустимых значений в столбец TIME, оно также является допустимым и лежащим в пределах нормального диапазона.

 

DATETIME

Описание: значение даты и времени (обязательны обе части), представленное в формате " YYYY-MMDD hh: mm: ss".

Допустимые атрибуты: только глобальные атрибуты.

Диапазон: от 1000-01-01 00: 00: 00" до " 9999-12-31 23: 59: 59".

Нулевое значение: 0000-00-00 00: 00: 00".

Значение по умолчанию: NULL, если столбец может иметь значение NULL, 0000-00-00 00: 00: 00", если NOT NULL.

Объем: 8 байт.

 

Функции MySQL

Рассмотрим наиболее употребляемые и полезные функции PHP для MySQL.

int mysql_affected_rows ( [resource link_identifier] )

Возвращает количество рядов, затронутых последним INSERT, UPDATE, DELETE запросом к серверу, на который ссылается указатель link_identifier. Если ресурс не указан, функция использует последнее, успешное соединение, выполненное с помощью функции mysql_connect(). При использовании транзакций mysql_affected_rows() надо вызывать после INSERT, UPDATE, DELETE запроса, но не после подтверждения.

При использовании UPDATE, MySQL не обновит колонки, уже содержащие новое значение. Вследствие этого, функция mysql_affected_rows() не всегда возвращает количество рядов, подошедших по условия, только количество рядов, обновлённых запросом.

Пример:

mysql_query(‘UPDATE myTable SET school=123, city= ‘Минск’ WHERE id=4’);

if (mysql_affected_rows() > 0) {

print ‘Данные успешно изменены’;

}

 

int mysql_insert_id ( [resource link_identifier] )

Возвращает ID, сгенерированный колонкой с AUTO_INCREMENT последним запросом INSERT к серверу, на который ссылается переданный функции указатель link_identifier. Если параметр link_identifier не указан, используется последнее открытое соединение. Mysql_insert_id() возвращает 0, если последний запрос не работал с AUTO_INCREMENT полями. Если вам надо сохранить значение, убедитесь, что mysql_insert_id() вызывается сразу после запроса.

Пример:

mysql_query(“INSERT INTO mytable (product) values (‘kossu’)”);
print “Last inserted record has id “. mysql_insert_id();

 

string mysql_escape_string ( string unescaped_string )

Функция экранирует все спец-символы в unescaped_string, вследствие чего, её можно безопасно использовать в mysql_query(). Mysql_escape_string() не экраинрует “%” и “_”. Функция идентична mysql_real_escape_string(), исключая то, что mysql_real_escape_string() принимает параметром ещё и указатель на соединение и экранирует в зависимости от кодировки. Mysql_escape_string() не делает этого и результат работы не зависит от кодировки, в который вы работаете с БД.

Пример:

$item = “Zak’s Laptop”;
$escaped_item = mysql_escape_string($item);
print “Escaped string: “. $escaped_item;

 

Результат:

Zak\’s Laptop

 

1.2.1 Функции непосредственно MySQL:

IFNULL(expr1, expr2)

Если expr1 не равно NULL, то функция IFNULL() возвращает значение expr1, в противном случае - expr2. В зависимости от контекста функция IFNULL() может возвращать либо числовое, либо строковое значение:

mysql> SELECT IFNULL(1, 0);

-> 1

mysql> SELECT IFNULL(NULL, 10);

-> 10

mysql> SELECT IFNULL(1/0, 10);

-> 10

mysql> SELECT IFNULL(1/0, 'yes');

-> 'yes'

 

Данная функция полезна при использовании LEFT JOIN. Допустим имеется таблица Students и таблица Hobbies, содержащая хобби студентов. Предполагается, что не каждый студент имеет хобби. Задача узнать хобби каждого студента, а если его нет – вывести строку ‘отсутствует’.

 

SELECT s.name, IFNULL(h.hobby, ‘отсутствует’) FROM students s

LEFT JOIN hobbies h ON s.idStudent = h.idStudent;

 

IF(expr1, expr2, expr3)

Если expr1 равно значению ИСТИНА (expr1 < > 0 и expr1 < > NULL), то функция IF() возвращает expr2, в противном случае - expr3. В зависимости от контекста функция IF() может возвращать либо числовое, либо строковое значение:

mysql> SELECT IF(1> 2, 2, 3);

-> 3

mysql> SELECT IF(1< 2, 'yes', 'no');

-> 'yes'

mysql> SELECT IF(STRCMP('test', 'test1'), 'no', 'yes');

-> 'no'

 

LOCATE(substr, str)

Возвращает позицию первого вхождения подстроки substr в строку str. Если подстрока substr в строке str отсутствует, возвращается 0:

mysql> SELECT LOCATE('bar', 'foobarbar');

-> 4

mysql> SELECT LOCATE('xbar', 'foobar');

-> 0

 


Поделиться:



Последнее изменение этой страницы: 2017-03-14; Просмотров: 358; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.048 с.)
Главная | Случайная страница | Обратная связь