Page 154 - 4636
P. 154

mysqli_affected_rows(). В процедурній версії це дійсно функція, тоді як в об'єктно-орієнтовані
        версії вона являє собою змінну класу:
              echo $db->affectedrows." книга додана в базу даних.";
              У  попередньому  сценарії  функція  mysqli_num_rows()  застосовувалася  для  визначення
        кількості рядків, які запитом SELECT. При написанні запитів, які змінюють базу даних, наприклад,
        INSERT,  DELETE,  UPDATE,  замість  цієї  функції  слід  використовувати  mysqliaffectedrows().
        Ось ми ознайомилися з основами використання баз даних MySQL з РНР.

              8.2 Використання підготовлених операторів

              Бібліотека  mysqli  підтримує  використання  підготовлених  операторів.  Вони  корисні  для
        прискорення багаторазового виконання одних  і тих же запитів, але з різними даними. Підготовлені
        оператори  також  оберігає  від  загроз  введення  SQL-коду  з  додавання  даних.  Основна  концепція
        підготовленого оператора полягає в роздільній відправці MySQL шаблону запиту, який повинен бути
        виконаний,  і  даних  для  цього  шаблону.  Ви  можете  посилати  безліч  однотипних  даних  одного
        підготовленого оператора; ця можливість дуже корисна при виконанні групових вставок. У сценарії
        insert book.php підготовлені оператори можна застосовувати таким чином:
              $query = "insertintobooksvalues(?, ?, ?, ?)";$stmt = $db-
        >prepare($query) ;$stmt->bind_param("sssd", $isbn, $author, $title,
        $price);$stmt->execute () ;echo $stmt->affected_rows.' книга додана в
        базу даних.';$stmt->close () ;
              Розглянемо  наведений  код,  рядок  за  рядком.  При  побудові  запиту  замість  кожного  фрагмента
        даних  поміщається  знак  питання  (?).  При  цьому  не  використовуються  ні  лапки,  ні  які-небудь  інші
        розділові символи.  У другому рядку викликається $db->Query() або mysqlistmtprepare() в
        процедурній  версії.  Цей  рядок  створює  об'єкт  оператора  або  ресурс,  який  потім  буде
        використовуватися для подальшої обробки.В об'єкті оператора визначено метод bind_param(). (У
        процедурній  версії  ця  функція  mysqli_stmt_bind_param().)  Призначення  bind_param()
        полягає в тому, щоб повідомити РНР, якими змінними повинні бути заміщені знаки питання в запиті.
        Перший параметр являє собою рядок, чимось схожу на рядок формату, що використовується у функції
        printf(). Використовуване значення "sssd", означає, що будуть передаватися три рядки  і число
        подвійної  точності.  Допускається  також  передача  цілочислового  значення  (і)  і  великого  двійкового
        об'єкта (b). Після параметра формату повинні слідувати змінні, значення яких будуть заміщати знаки
        питання      у     запиті,    в     порядку     їх     слідування.     Виклик      $stmt->execute()
        (mysqli_stmt_execute() в процедурній версії) виконує запит. Потім можна подивитися кількість
        задіяних  рядків  і  закрити  оператор.  Чим  самим  корисний  підготовлений  оператор?  Чудово  те,  що
        можна підмінити значення чотирьох зв'язаних змінних і ще раз виконати запит без необхідності його
        підготовки. Дана можливість виключно корисна при виконанні великих групових вставок. Подібно до
        зв'язування параметрів, можна пов'язувати і результати. Для запитів SELECT можна використовувати
        $stmt->bind_result() (або mysqli_stmt_bind Про результат ) для побудови списку змінних,
        які  повинні  містити  стовпці  результату.  Кожен  раз,  коли  ви  викликаєте  $stmt->fetch()  (або
        mysqli_stmt_fetch() ), значення стовпців з наступного рядка результуючого набору заносяться в
        задані  змінні  зв'язку.  Наприклад,  у  розглянутому  вище  сценарії  пошуку  книг  можна  було  б
        скористатися таким оператором:
              $stmt->bind_result($isbn, $author, $title, Sprice);
        для  зв'язування  чотирьох  перерахованих  змінних  з  чотирма  стовпцями,  які  повертаються  запитом.
        Після виклику
              $st.mt->execute ();

                                                            151
   149   150   151   152   153   154   155   156   157   158   159