Виконання запитів
За виконання запитів відповідають функції mysqli::query() mysqli::real_query() і mysqli::multi_query(). Найчастіше застосовується функція mysqli::query()оскільки вона виконує відразу дві задачі: виконує запит і буферизує на клієнті результат цього запиту (якщо він є). Виклик mysqli::query() ідентичний послідовному виклику функцій mysqli::real_query() і mysqli::store_result()
Приклад #1 Виконання запитів
Loading...
Буферизація результатів запиту
Після виконання запиту результати можна отримати відразу, або вважати рядок за рядком з сервера. Буферизація набору результатів за клієнта дозволяє серверу якомога раніше звільнити ресурси, пов'язані з результатами запиту. Простіше кажучи, покупці повільно використовують набори результатів. Тому рекомендується використовувати буферизовані набори результатів . mysqli::query() поєднує виконання запиту та буферизацію набору результатів.
PHP-програми можуть вільно оперувати даними всередині буферизованих результуючих наборів. Швидка навігація рядками наборів обумовлена тим, що набори повністю розташовуються в пам'яті клієнта. Слід пам'ятати, що найчастіше обробка результатів клієнта простіше, ніж засобами сервера.
Приклад #2 Навігація рядками буферизованої результуючої таблиці
Loading...
Результат виконання наведеного прикладу:
Обратный порядок...
id = 3
id = 2
id = 1
Исходный порядок строк...
id = 1
id = 2
id = 3
Небуферизовані результуючі набори
Якщо клієнтські ресурси обмежені, і в той же час не потрібно підтримувати низьке навантаження на сервер, можна використовувати буферизовані результуючі набори. Навігація за такими таблицями неможлива, тому що так чи інакше мають бути оброблені всі рядки набору.
Приклад #3 Навігація рядками небуферизованої результуючої таблиці
Loading...
Типи даних значень у результуючій таблиці
Функції mysqli::query() mysqli::real_query() і mysqli::multi_query() призначені для виконання запитів, що не готуються. На рівні протоколу клієнт-серверної взаємодії MySQL за виконання запитів відповідає команда COM_QUERY
та текстовий протокол. Коли використовується текстовий протокол, сервер MySQL перед відправкою клієнту перетворює всі дані в результуючому наборі текстових рядків. Це перетворення виконується незалежно від типу даних SQL-стовпця результуючої таблиці. Клієнтські бібліотеки mysql, своєю чергою, отримують усі дані, приймаючи їх за рядки. На клієнті не проводиться жодного зворотного перетворення до вихідних типів, всі дані, отримані програмою залишаються PHP рядками.
Приклад #4 Текстовий протокол за промовчанням повертає рядки
Loading...
Результат виконання наведеного прикладу:
id = 1 (string)
label = a (string)
Якщо використовується бібліотека mysqlnd, можна включити перетворення цілих чисел і чисел з плаваючою точкою зі стовпців таблиці в PHP числа. Робиться це завданням налаштування підключення MYSQLI_OPT_INT_AND_FLOAT_NATIVE
. У такому випадку mysqlnd перевірятиме метадані стовпців і перетворюватиме SQL-числа цих полів на PHP-числа, якщо ці значення не виходять за рамки допустимих діапазонів типів даних PHP. Тобто, наприклад, SQL INT число потрапить у PHP додаток у вигляді цілого (integer).
Приклад #5 Отримання вихідних типів даних у програмі
Loading...
Результат виконання наведеного прикладу:
id = 1 (integer)
label = a (string)
Дивіться також