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