Використання sqlite manager для роботи з субд sqlite. Що можна зробити із системою за допомогою прав root у SqLite

MV framework підтримує СУБД MySQLта SQLite. Нижче представлена ​​технологія роботи з базою даних SQLite, яка є компактною і швидко переноситься з одного сервера на інший, при цьому має всі необхідними можливостямидля сучасної СУБД

MV працює з SQLite за допомогою бібліотеки PDO. На більшості серверів воно включено, але якщо база даних не запускається через відсутність драйвера, то можна прочитати про його налаштування. SQLite збирає всю інформацію в одному файлі "userfiles/database/sqlite/database.sqlite".

Щоб відкрити файл бази даних для роботи з таблицями, необхідно встановити додаток до браузеру Mozilla Firefox під назвою SQLite Manager. Додаток дозволяє працювати з базою даних за аналогією до phpMyAdmin для MySQL. https://addons.mozilla.org/ru/firefox/addon/sqlite-manager/

Коли додаток буде встановлено, потрібно запустити SQLite Manager та вибрати файл потрібної базиданих "userfiles/database/sqlite/database.sqlite". Після підключення файлу бази даних до SQLite Manager у лівій колонці з'явиться список таблиць.

Для створення нової таблицінеобхідно натиснути в верхньому меню"Таблиця -> Створити таблицю", після чого з'явиться вікно для введення полів таблиці.

Для переходу до вже створеної таблиці достатньо натиснути на назву таблиці в лівій колонці. У верхній частині на вкладках можна переглянути структуру таблиці та список записів таблиці.

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

Загалом робота в SQLite Manager не сильно відрізняється від роботи в phpMyAdmin для MySQL. Також можна керувати таблицями та індексами, виконувати прямі запити та створювати тригери. Вся робота відбувається лише з одним файлом, який потім копіюється з локального сервера на робочий. При цьому важливо не забувати ставити права на запис для файлу бази даних та папки в якій він знаходиться. Залежно від конфігурації сервера права можуть бути: 777, 770, 775 та інші.

Налаштування PDO SQLite

Якщо драйвер PDO для SQLite підключено, під час виклику функції phpinfo() можна побачити інформацію про версію драйвера. Якщо ж даної інформації немає, це означає, що драйвер не підключений і його треба включити в налаштуваннях PHP.

У папці бібліотек (розширень) PHP мають бути файли php_pdo_sqlite.dll та php_sqlite3.dll.

У файлі php.ini необхідно розкоментувати рядки для підключення даних бібліотек, після чого потрібно перезапустити веб-сервер.

Після перезапуску сервера в phpinfo() має з'явитися інформація про підключення драйвера PDO для SQLite як на скріншоті вище.

SQLite – це база даних, чимось схожа на MySQL. Принципова відмінність SQLite від інших БД в тому, що вся база є одним файлом. Якщо в MySQL базазберігається десь у нетрях сервера і недоступна для перенесення, то SQLite з цим все до неподобства просто: один файл - одна база.

Звичайно ж, сервер повинен підтримувати драйвер SQLite (так само як і будь-який інший БД), але, як правило, зараз з цим проблем немає.

SQLite дозволяє звично працювати з базою через SQL, створювати таблиці, поля тощо. В цілому можна сказати, що SQLite ні в чому не поступається звичною MySQL, за винятком, мабуть більше повільної роботиз "важкими" sql-запитами щодо оновлення даних (insert та update). Але, знову ж таки, це для високонавантажених сайтів.

Величезним плюсом SQLite буде її легка переносимість. Копіювати файл – що може бути простіше? Не потрібно дбати про бекапи, як у MySQL, не потрібно створювати на сервері користувача з паролем, не потрібно створювати саму базу. З SQLite просто беремо та користуємося.

Для роботи з базою даних PHP кращевикористовувати PDO - Об'єкти даних PHP - це т.зв. абстракція, яка пропонує єдиний інтерфейс для роботи із різними базами. Теоретично, використовуючи PDO, можна переключитися будь-яку базу, не переробляючи SQL-запити, наприклад з MySQL на SQLite. Змінюються лише параметри підключення.

Таким чином, SQLite буде підключатися через PDO. Для цього нічого не потрібно, оскільки сам PDO вже у складі PHP, а драйвер SQLite зазвичай також включений на серверах.

Але перш ніж приступати до програмування, потрібно створити саму базу. Наприклад, для MySQL існує phpMyAdmin, через який можна виконувати різні операції. Для SQLite також є схожі розробки, але я покажу, як це можна робити через браузер FireFox. Для цього потрібно лише встановити доповнення.

Щоб додати цей додаток до основного меню FireFox(«гамбургер»), натисніть Змінити та перетягніть мишею іконку в меню.

На цьому встановлено та можна ним користуватися.

Для початку створимо нову базуданих. У SQLite - це окремий файл, який буде мати розширення.sqlite. SQLite Manager запропонує вказати каталог, де зберігатиметься цей файл. Виберіть або створіть новий каталог. Для нас це поки що не має особливого значення. В результаті буде створено sqlite-файл із новою базою.

Цей файл можна переміщати (і перейменовувати) куди завгодно, а потім відкривати командою меню Бази даних - Підключити базу даних.

Тепер потрібно створити таблицю (або таблиці) у базі даних.

SQLite Manager автоматично створює службові таблиці sqlite_XXX. Ми їх не чіпаємо, і нам вони не заважають.

Таблиця в БД - те місце, де зберігається структурована інформація. Таблиця повинна мати набір полів із заданими властивостями. Наприклад, поле може бути integer - для цілих чисел, або text - для тексту. Кількість полів може бути довільною і визначається лише завданням вебмайстра.

Нехай, наприклад, у нас буде таблиця pages з полями

  • id - унікальний номер(автоінкремент)
  • slug- посилання
  • text- довільний текст
  • hits- кількість переглядів

Після того, як таблицю створено, зверніть увагу на блок «SQL-оператор, який створив цей об'єкт». У ньому буде SQL-запит, яким можна створити таблицю. Він може стати в нагоді, якщо потрібно створити таблицю в базі через PHP.

На вкладці «Перегляд та Пошук» можна редагувати таблицю. Створимо для прикладу два рядки, де поле slugбуде home і contact. Це будуть дві сторінки: головнаі сайт/contact.

Поле hitsміститиме лічильник переглядів сторінки. Текст може бути будь-яким.

Все, база готова, тепер її можна використовувати.

Поставимо завдання. Нехай у нас буде простенький сайт, який видаватиме по короткому засланні(slug) відповідний текст та кількість переглядів.

Якщо ми робимо це на локальному сервері, то нехай сайт буде в каталозі sqlite. У ньому підкаталог dbкуди ми і скопіюємо наш pages.sqlite.

Роутінг ми можемо зробити, як описано в попередній статті. Файл.htaccess

AddDefaultCharset UTF-8 Options -Indexes RewriteEngine on RewriteBase /sqlite/ RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule (.*) /sqlite/index.php?$1

У index.phpсам роутинг буде описаний одним рядком:

$page = ($p = key($_GET)) ? $p: "home";

  • підключаємо базу
  • робимо в ній вибірку по $page
  • виводимо отримані дані
Я навмисне спрощую алгоритм, щоб не ускладнювати php-код.

Існують два варіанти роботи з БД. Перший – це нативний php-код. Він не дуже складний, але безліч параметрів трохи напружує. Тому другий варіант - використання додаткових бібліотек-обгорток. З ними код стає лаконічнішим.

Наведу код index.php у першому варіанті:

setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); $sql ="SELECT * FROM pages WHERE slug=:page LIMIT 1"; $sth = $pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)); $sth->execute(array(":page" => $page)); $rows = $sth->fetchAll(); print_r($rows); // тут виводимо дані ) catch (Exception $ e) ( echo $ e-> getMessage (); ) # end of file

Для другого варіанту я використав php-бібліотеку із сайту labaka.ru, яку розмістив у підкаталог lib.

Код index.php:

Даний приклад виводитиме для різних адрес різний текст і при цьому працюватиме лічильник переглядів. Якщо потрібно додати нову сторінку, її досить створити у базі. Для зручності, SQLite Manager можна підключити базу прямо з каталогу сайту.

Тут слід зазначити кілька важливих моментів.

Насамперед, вся робота з PDO повинна полягати в блок try..catch. У такий спосіб відловлюються повідомлення про помилки.

Дані, які відправляються в SQL-запит повинні проходити через валідацію. У PDO, коли використовується попередня підготовка даних (PDO::prepare), виконується примусове екранування параметрів. Це дозволяє захиститись від можливих SQL-ін'єкцій.

При підключенні бази даних SQLite у разі відсутності файлу бази він буде створений автоматично. На цьому базується створення бази відразу після його підключення та створення необхідних таблиць першим SQL-запитом (про який я написав вище).

Ще одне зауваження щодо SQLite. Оскільки база це файл, його можна завантажити по URL прямо через браузер. Тому каталог із SQLite-файлами краще захищати через.htaccess рядком Deny from all . Або ж розміщувати вище, ніж основний www-каталог.

SQLite може стати в нагоді для невеликих завдань, які вимагають невеликої бази даних: лічильники, голосування, мета-дані сторінок і т.п.

Ви можете до цієї статті.

Знадобилося мені днями знайти якийсь невеликий, але функціональний менеджер баз даних SQLite під Windows. Пропозицій у Мережі виявилася маса, починаючи від простих безкоштовних програм-браузерів БД і, закінчуючи, навороченими утилітами з масою як необхідних, і марних наворотів. У результаті утворився цей огляд. Свій кінцевий вибір я робив, виходячи з таких вимог до програми:

  1. Функціональність. Можливість створювати таблиці, тригери, індекси тощо.
  2. Коректна робота з кодуванням UTF-8
  3. Ціна. Бажано, звичайно, щоб ціна була рана нулю, але в межах розумного можна і трохи розщедритися.
  4. Наявність російського інтерфейсу. Не важливо, але все-таки зручніше працювати з програмою рідною мовою.
  5. Зручність. Не хотілося б довго і завзято колупатися в інтерфейсі у пошуках необхідних функцій.

Так як осягнути неосяжне неможливо (це про кількість пропозицій на ринку програмних продуктів), то я вибрав кілька програм різних за своїми можливостями і включив їх в цей огляд.

SQLite Database Browser

Ціна: безкоштовно

Простий у використанні браузер баз даних SQLite. Так як основне призначення програми – перегляд даних, то, відповідно, функціональність обмежена.

Використовуючи SQLite Database Browser можна:

  1. переглянути структуру бази даних
  2. створювати нові таблиці з використанням майстра
  3. створювати індекси
  4. переглядати дані в таблицях і виконувати елементарний SQL-запит (програма висне наглухо при виконанні запитів типу “CREATE TRIGGER….”).

SQLite Database Browser розуміє UTF-8 і, при необхідності, дозволяє змінити кодування. Російський інтерфейс відсутня.

SQLite3 manager LITE

Сайт виробника: http://www.pool-magic.net/sqlite-manager.htm

Ціна: версія Lite розповсюджується безкоштовно .

У порівнянні з попередньою програмою SQLite3 manager LITE виглядає більш функціональним. Крім того, що можна просто переглядати дані в таблицях, також можна переглядати та створювати тригери, індекси, уявлення тощо. Додатково можна експортувати всі мета-дані бази даних. При цьому можна створювати файли з даними для експорту таблиць у Paradox та Interbase.

Також у програмі була зроблена спроба зробити щось на зразок візуального майстра створення запитів на кшталт MS Access, але, на мій погляд, спроба успіхом не увінчалася.

Безкоштовна версія має один недолік - не розуміє дані в кодуванні UTF-8. Є, звісно, ​​можливість вказати кодування бази даних під час відкриття файлу, але у списку кодувань UTF-8 відсутня. Як працює Full-версія програми я не побачив, т.к. на сайті виробника чорт ногу зломить. Висить якийсь незрозумілий JavaScript, що виводить незрозумілу інфу. Загалом склалося враження, що проект успішно затих.

SQLite Administrator

Ціна: безкоштовно

Досить зручна у використанні та функціональна програма. Вся структура бази даних представлена ​​у вигляді дерева об'єктів, яке можна налаштовувати залежно від своїх переваг. Зважаючи на все SQLite Administrator написаний з використанням , т.к. серед додаткових функцій програми є генерація коду Delphi за виділеним фрагментом SQL. Для створення таблиць, тригерів тощо. використовуються зручні майстри. При використанні цієї програми дуже засмутила відсутність можливості нормальної роботи з UTF-8 і, незначно, але все ж таки дещо зіпсував враження російський інтерфейс - деякі написи не поміщаються у відведене їм місце. тому що при тестуванні використовував дефолтний English.

Якщо вам не важливо використання UTF-8, то качайте SQLite Administrator - не пошкодуєте.

SQLiteManager

Ціна: 49$ Є Demo-версія

SQLiteManager як і попередня програма має досить зручний інтерфейс, чудово розуміє UTF-8 і водночас має низку своїх "фішок". Серед яких:

  1. Аналізатор SQL-запитів
  2. Перевірка цілісності бази даних
  3. Оптимізація бази даних
  4. Можливість використання у програмі своїх скриптів (на мою думку VBScript) для підвищення зручності роботи.

До додаткових функцій програми можна віднести можливість створення звітів по базі даних. Demo-версія має свої жорсткі обмеження за запитами, наприклад, результати SELECT потрапляють лише перші 20 записів з набору. У плані зручності роботи зіпсувало враження дуже сильно миготіння при перемальовки вікон. У мене не такий вже й древній комп, але навіть при 512 Mb видюшки вікна помітно моргали.

SQLite Maestro

Ціна: від 79$ є Trial-версія на 30 днів .

Взагалі лінійка продуктів від SQL Maestro налічує безліч товарів для адміністрування найрізноманітніших баз даних, зокрема і SQLite. Перше враження від програми – добротно зроблена іграшка для споглядання її збоку. Так SQLite Maestro має всю ту функціональність, що мені була потрібна, зручне дерево об'єктів баз даних, можливість досить швидко створювати різні об'єкти БД і т.д., але після досить легкого використання SQLite Administrator вид багаторівневих заморочених меню з купою різних опцій, які по-великому рахунку в принципі не потрібні, якось стає моторошно працювати з цією програмою. З цієї причини і була виставлена ​​одна за зручність. Ціна теж не особливо порадувала - 79 $. На мене так краще спростили б інтерфейс і знизили цінник хоча б до 50 $ тоді можна було б і подумати про покупку.

SQLite Expert

Ціна: версія Personal - безкоштовно, версія Professional - від 38 $

В цілому, для себе я не надто великих відмінностей версії Personal від Professional . Щоб розібратися з роботою SQLite Expert знадобилося трохи більше п'яти хвилин. Програма має весь той набір функцій, які мені були необхідні. Як і SQLiteManager Expert вміє перевіряти цілісність бази даних, експортувати дані до CSV чи інші формати баз даних, має зручний редактор SQL, майстрів до створення таблиць, індексів, тригерів тощо. Доступ до функцій програми дещо складніший, ніж у SQLite Administrator , але не настільки, щоб відлякувати тільки своїм виглядом:). Загалом, я зупинив свій вибір на SQLite Expert Personal .

Саме ця програма на даному етапі моєї роботи з SQLite показала найкращі результати як за якістю та зручністю роботи, так і набором усіх необхідних функцій. Шкода, звичайно, що безкоштовний Administrator не знає, що таке UTF-8 - може в новій версії підпраяти, тоді, можливо, я і перегляну свій вибір.

Книжкова полиця

Назва:Бази даних та Delphi. Теорія та практика

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

Купити на ЛітРес383 руб.
Автор: Анатолій Хомоненко, Володимир Гофман
Назва:Робота з базами даних у Delphi
Опис: Розглядається використання засобів Delphi для розробки програм баз даних. Даються поняття баз даних, характеризуються елементи та описуються етапи проектування реляційних баз даних, викладено технологію розробки інформаційних систем, висвітлюються прийоми роботи з даними, створення таблиць та додатків баз даних, підготовка звітів.
Купити на ЛітРес151 руб.

SQLite - дуже популярне рішення для зберігання даних, і операційна система Android не виняток. Сама система та багато програм використовують для зберігання інформації бази даних - файли з розширенням db. Які саме дані містяться в базах, як їх подивитися, що з ними можна зробити і чим це загрожує пристрою з правами суперкористувача - про все це я розповім у статті.

WARNING

Автор статті не є знавцем баз даних, так само як і SQLite, розуміє, що деякі дії можна робити простіше, а також не несе відповідальності за виникнення параної після прочитання цієї статті. Також настійно рекомендується перед будь-якими маніпуляціями зробити бекап редагованої бази.

Робота з базами

Для роботи з базами існує багато різноманітного софту як для комп'ютера, так і для Android-пристроїв. Бази програм зазвичай знаходяться на шляху /data/data/НАЗВА ПАКЕТАДОДАТКИ/databases. Дізнатися назву пакета програми, що цікавить, можна зайшовши в «Налаштування -> Програми -> Все» і вибравши потрібне (відкриється вкладка «Про програму»), або в адресному рядку браузера на сторінці програми в Play Market.

Щоб потрапити в каталог /data/data, необхідні права суперкористувача, а з переглядом вмісту відмінно впорається Root Explorer. Для зручнішої роботи, а також для редагування баз на пристрої можна використовувати, наприклад, SQLite Debugger, а на комп'ютері - DB Browser for SQLite. Для роботи з базами також потрібний встановлений BusyBox з аплетом sqlite3. Усі маніпуляції у статті проводяться на Nexus 5 з прошивкою 5.1. Доступні для перегляду та редагування бази, розбиті за відповідними програмами, на пристрої можна переглянути в тій самій програмі SQLite Debugger, натиснувши на головному екрані меню App. То чим же можуть бути корисні бази в першу чергу тобі і що може вкрасти зловмисник? Спробуємо розібратися.

INFO

Велика подяка demosfenus за допомогу в написанні SQL-запитів.

accounts.db

Знаходиться в /data/system/ або /data/system/users/0 залежно від версії прошивки і містить дані про всі облікові записи, зареєстровані на пристрої. Як видно на скріншоті "Структура accounts.db" у таблиці accounts, до мого пристрою прив'язано п'ятнадцять облікових записів різних програм. Майже всім зазначені логіни, для частини є паролі (на малюнку частина видалена) в зашифрованому вигляді.


У таблиці authtokens містяться токени авторизації від програм, всіх сервісів Google, GMS та інших програм. На вкладці extras - додаткові ключі та значення, такі як GoogleUserId та список підключених додатків/сервісів. У мене їх близько п'ятдесяти, включаючи Talk, YouTube, URL shortener, Wallet та інші.


Не скажу, чи зловмисник може розшифрувати паролі з бази, але отримати доступ до сервісів можна, просто підкинувши базу на інший пристрій. Спробуймо провести такий експеримент. Візьмемо базу зі смартфона Nexus 5 та планшет Nexus 7 із чистою системою (свіжовстановлена ​​5.1 через flash-all.bat з ключем -w, потім root). Після завантаження чистої системи натискаємо «Пропустити» при запиті додавання облікового запису, далі встановлюємо весь софт, прописаний в accounts.db (WhatsApp офіційно не підтримує роботу на планшетах, тому качаємо APK з варезників або 1mobile.com). Далі скидаємо базу зі смартфона, поміщаємо в каталог /data/system/users/0 на планшеті та перезавантажуємося.

Після завантаження бачимо, що на вкладці "Налаштування -> Акаунти" з'явився наш обліковий запис Google і дав нам повний доступ до всіх пов'язаних програм. Пошта, за допомогою якої можна змінити пароль від облікового запису, всі контакти з номерами телефонів, Google+, фотографії, файли Google Drive, нотатки, збережені авторизації в мобільному Хромі і так далі. Єдиний неприємний момент – неробочий Play Market, який видає: «Помилка при отриманні даних із сервера rpc: s-7: aec-7». Погуглив текст помилки, можна легко його реанімувати.

Інші програми поводилися по-різному:

Висновок: до останніх трьох програм легко отримати доступ, якщо відвести дані з accounts.db або саму базу.

mmssms.db

А ось і вся наша СМС-листування. Знаходиться вона на шляху /data/data/com.android.providers.telephony/databases/. Спробуємо щось змінити. Наприклад візьмемо СМС з номера 900 - це інформатор Ощадбанку. На скріншоті «СМС від Ощадбанку до і після втручання в mmssms.db» зліва, останнє повідомлення: «ECMC6844 02.05.15 12:49 купівля 450р 210009 KARI Баланс: 3281.16р». Поміняємо його більш цікаве повідомлення, показане праворуч. Для цього відкриваємо базу на пристрої SQLite Debugger. Нас цікавить таблиця SMS. Виділимо необхідні поля запитом:

> SELECT _id, thread_id, address, date, body FROM sms WHERE address = 900

Програма має тач-орієнтований інтерфейс і самі команди можна не писати вручну. Вони підставляються автоматично після виклику меню довгим тапом на значенні або після натискання відповідного слова у верхньому рядку. Команди показані для зручності використання надалі (наприклад, під час роботи з консоллю чи виклику скриптів Таскером).


Отже, натиснувши на SELECT і відзначивши галочками потрібні поля, отримаємо таблицю, що містить номер запису, номер гілки розмови, номер відправника, дату в UNIX time і текст СМС (див. скріншот «Змінюємо значення в базі mmssms.db»). Довгий тап на останній запис. Програма пропонує вибір дії. Вибираємо Update value. Вводимо потрібний нам текст. За аналогією із попередніми СМС зробимо собі зарахування грошей через банкомат. Змінимо текст на «ECMC6844 05.05.15 10:18 зарахування 1000000р ATM 367700 Баланс: 1003731.16р». Сам запит буде виглядати так:

> UPDATE SMS SET body = "ECMC6844 05.05.15 10:18 зарахування 1000000р ATM 367700 Баланс: 1003731.16р" WHERE _id = 196

Натиснувши на трикутник у верхньому правому кутку, внесемо зміну в рядок. Підженемо час із тексту СМС (05.05.15 10:18) у полі date. Можна використовувати будь-який UNIX time конвертер, наприклад, Онлайн калькулятор unix time stamp . Відповідна дата буде 1430810300. Додамо в кінець три довільні цифри для мілісекунд і вставимо отримане значення в поле date.

> UPDATE sms SET date = 1430810300000 WHERE _id = 196

Дві команди можна об'єднати в одну, вписавши поля, що редагуються, з даними через кому. Натискаємо в правому нижньому кутку кнопку Commit і вносимо зміни до бази. Дивимося, що вийшло. На тому ж скріншоті "СМС від Ощадбанку до і після втручання в mmssms.db" справа видно, що тепер ми багаті люди і на рахунку ми більше мільйона. Іноді потрібно очистити дані програми, що обробляє СМС, щоб зміни набули чинності.


Спробуємо додати до бази нову СМС. Для цього нам знадобляться дві таблиці в базі: threads, яка зберігає порядковий номер і заголовок (останнє повідомлення) розмови/нитки, і sms, яка зберігає всю інформацію, що залишилася. Варіантів подій тут дві.

Варіант 1: додаємо СМС до існуючої розмови.Для цього шукаємо у таблиці sms номер гілки розмови – thread_id, що відповідає номеру відправника. Як видно на скріншоті «Змінюємо значення в базі mmssms.db», для інформатора Ощадбанку це цифра 7. Додамо новий рядок у розмову, показану на попередньому скріншоті. Заповнюємо наступні поля: thread_id - гілка/нитка розмови; address – номер відправника; person - якщо відправник є у списку контактів; date – час приходу СМС; read - 1 для прочитаного повідомлення; 0 для непрочитаного; type - 1 вхідне, 2 вихідне (є ще 0 - що відправляється і 4 - чернетка); body – текст повідомлення. Для додавання нового рядка до таблиці необхідно виконати таку команду:

INSERT INTO SMS (threadid, address, date, read, type, body) VALUES (7, 900, strftime("%s", "now")*1000, 1, 1, "Текст повідомлення")

Значення strftime("%s", "now")*1000 використовується для вставки поточного часу. Для вставки конкретної дати та часу необхідно використовувати UNIX time із тринадцятьма цифрами. Результат можна побачити на скріншоті «Додаємо нову СМС у існуючу розмову».


Варіант 2: додаємо нову СМС та створюємо нову гілку розмови.Якщо за аналогією додати рядок з новим номером +7123456789, якого немає в записнику та з яким раніше не було листування, то у відправниках буде значитися «Невідомий відправник» без вказівки номера (див. скріншот «Додаємо нову СМС та створюємо нову гілку» зліва ). Щоб цього уникнути, необхідно ув'язати ще таблиці threads і canonical_addresses. Спочатку додаємо рядок з номером у canonical_addresses, принагідно перевіряючи наявність цього номера в таблиці:

Продовження доступне лише передплатникам

Варіант 1. Оформи передплату на «Хакер», щоб читати всі матеріали на сайті

Підписка дозволить тобі протягом зазначеного терміну читати ВСІ платні матеріали сайту. Ми приймаємо оплату банківськими картками, електронними грошима та переказами з рахунків мобільних операторів.