Курс php запити в php

У попередньому уроці ми познайомилися з основами мови SQL і тепер спробуємо застосувати ці знання на практиці.

Всі запити в PHP в основному виконуються за допомогою функції mysql_query (). Функція приймає два параметри: рядок запиту і ідентифікатор підключення, отриманий після виклику mysql_connect (). В принципі, ідентифікатор підключення можна не вказувати, тоді буде використовуватися останнім зроблене підключення. Але такий підхід загрожує помилками в складних скриптах з декількома одночасними підключеннями до різних баз.

Як перший приклад виберемо всі рядки з нашої таблиці:

Функція mysql_query () позвращает посилання на результати виконання запиту. Якщо запит завершився з помилкою - функція поверне false. після чого текст помилки можна буде отримати викликом функції mysql_error (). а номер помилки - функцією mysql_errno ().

Для отримання окремого запису з результатів запиту необхідно скористатися однією з fetch-функцій (функції отримання даних). Їх декілька і кожна зручна в своєму випадку.

$ Result - це змінна, отримана після виклику mysql_query ()

Параметр $ type описує формат повертаються даних. Може приймати одне з трьох значень:

MYSQL_NUM. Функція повертає нумерований масив, де нульовий елемент - значення нульового поля, перший елемент - значення першого поля і т.д. (Поля вважаються "зліва направо" в тому порядку, в якому були оголошені в запиті):

MYSQL_ASSOC. Функція повертає асоціативний масив, в якому елемент з ім'ям поля містить значення цього поля.

MYSQL_BOTH. Повертається масив, в якому можна одночасно звертатися до даних і за номером і по імені.

Все fetch-функції працюють за одним алгоритмом. При першому виклику функція перевіряє наявність рядків і якщо результат запиту не порожній - повертає перший рядок і переводить покажчик текщей рядки на наступний запис. При кожному наступному виклику функція повертає користувачу поточний рядок і переходить до наступної. Якщо досягнутий останній рядок і передавати більше нічого - функція повертає false.

Таким чином, цикл перебору всіх записів буде вигядеть так:

Іноді виникає необхідність пересуватися по записах не тільки "вперед", але і "назад", тобто у напрямку від поточного рядка до першої. В цьому випадку треба використовувати функцію mysql_data_seek (), яка дозволяє перейти до запису із заданим номером.

Значення номера рядка має бути в діапазоні від 0 до кількості рядків в результатах запиту. Кількість рядків можна дізнатися за допомогою функції mysql_num_rows (). З урахуванням цього, можна переписати попередній приклад в більш безпечної формі:

Однак mysql_num_rows () може бути застосована тільки до результатів виконання SELECT. При виконанні всіх інших команд (INSERT, UPDATE і DELETE) функція повертає 0 (адже сервер не повертав жодного рядка). Щоб визначити, скільки рядків було вставлено, изменени або видалено при виконанні останнього запиту необхідно скористатися функцією mysql_affected_rows ().

Наприклад, наступний код допомагає дізнатися результати очищення таблиці:

Якщо вам необхідно дізнатися значення Автоінкрементний поля для щойно вставленої записи - скористайтеся функцією mysql_insert_id ().

Як вже говорилося раніше - все текстові значення в запитах записуються в одинарних лапках. Але дуже часто виникає ситуація, коли необхідно занести рядок, в якій вже є лапки (наприклад, пароль виду "my'1super'2password"). Якщо спробувати внести її в початковому вигляді, то MySQL не зможе обробити запит і видасть відповідну помилку. Щоб цього уникнути необхідно попередньо підготувати рядок до занесення. Для цього застосовується функція mysql_real_escape_string (). Вона перетворює все службові і нечитабельним символи до відповідних їм спецсимволи, такі як \ x00 \ n, \ r і т.п.

Обов'язкова перевірка всіх даних перед занесенням в таблицю не тільки є ознакою "хорошого тону" серед програмістів, а й є нагальною потребою для захисту сайту від злому і розкрадання даних.

При написанні складних запитів найкраще попередньо запит випробувати за допомогою сторонніх програм, а тільки потім додавати його в код. Такий підхід суттєво полегшує тестування як запиту, так і скрипта в цілому.

Схожі статті