Коли я готував цю нотатку у 2007 році, знайти приклади роботи PHP з InterBase та Firebird було складніше, ніж із MySQL. За моїми тодішніми спостереженнями, пошук частіше повертав матеріали про Delphi з InterBase. Тому я зібрав власний приклад підключення, читання результатів і вставлення даних.
Початковий код
Це архівний приклад API ibase_*. Він містить побудову SQL через конкатенацію зовнішніх даних, тому його не слід копіювати у робочий застосунок без перероблення.
// Подключение к базе данных Interbase
$conn=ibase_connect($dbname,$dbuser,$dbpass);
// Выполнение SQL-запроса и получение информации из него (аналогично, как в MySQL):
$stmt = 'select * from GET_ZAKAZID';
$sth = ibase_query($conn, $stmt);
while ($row = ibase_fetch_object($sth)) {
$zakazn=$row->DOCN_RETURN;
}
ibase_free_result($sth); // Освобождаем ресурсы, после получения необходимых данных
// Выполнение простой вставки с помощью INSERT
$stmt = 'INSERT INTO ZAKAZ(ZAKAZID, ZAKAZNA, TYPEZAKAZID'
.',EMAIL, KONT_TELEPHONE, MTELEPHONE, ICQ'
.') VALUES ('
.$zakazn.",'".trim(strip_tags(@$_POST['date_vipoln']))."',".@$_POST['type_cli'] .",'".trim(strip_tags(@$_POST['email']))."','".trim(strip_tags(@$_POST['telephone'])) ."','".trim(strip_tags(@$_POST['mtelephone']))."',".trim(strip_tags(@$_POST['icq']))
.")";
$sth = ibase_query($conn, $stmt) or die(ibase_errmsg());
// Закрываем коннект, после работы с базой данных
ibase_close($conn);Що робить приклад
ibase_connect відкриває з’єднання; ibase_query виконує запит; ibase_fetch_object читає рядки результату; ibase_free_result звільняє результат, а ibase_close закриває з’єднання. Назви таблиць, полів і процедури в коді належать до конкретної авторської бази.
Що важливо змінити в новій реалізації
Виклики trim і strip_tags не перетворюють введення користувача на безпечний SQL. Значення потрібно передавати параметрами підготовленого запиту, а не склеювати з текстом команди. Параметри призначені для значень; назви таблиць чи довільні фрагменти SQL так передавати не можна.
За документацією PHP 7.4, розширення Firebird/InterBase винесено з основного постачання. Для сучасного підключення до Firebird перевірте можливості PDO_FIREBIRD. Сумісність та керування транзакціями потрібно врахувати для вашого застосунку окремо.
Пов’язана історична нотатка: установлення розширення у PHP 5 на Ubuntu.
Немає коментарів:
Дописати коментар