Запись в БД PHP

Buddha

Client
Регистрация
10.03.2019
Сообщения
121
Благодарностей
18
Баллы
18
Приветствую, коллеги. Постараюсь объяснить, что происходит.

Значит так: на хостинге лежит скрипт php, который принимает обновления от бота тг через вебхук. Обновления пишутся в базу данных. Все работает норм, бот отвечает, строки в БД пишутся.

Решил перенести базу на виртуальный сервер, экспортировал, импортировал, пользователя создал, зенкой проверил, подключение есть, тестовая строка записалась.
Переписываю в скрипте данные для подключения к базе и скрипт перестает писать. То есть, на серваке строки в базе не появляются.
Сделал другой скрипт в той же папке на хостинге, тестовый, указал данные для подключения к базе на серваке, прописал insert с тестовой строкой. Строка в базу прописывается.
Так вот и не пойму, что происходит. Первый скрипт норм пишет в базу на хостинге, но не хочет писать в базу на серваке. Тестовый же скрипт нормально пишет в базу на серваке.
Первый скрипт никаких ошибок не выдает

Еще раз: первый скрипт рабочий, в базу, локальную относительно хостинга, пишет норм, но в удаленную не пишет. Тестовый скрипт на том же хостинге, в той же папке, с теми же данными для подключения в удаленную базу пишет. В локальную тоже, но это неважно

Вот что за мистика?)) Работы на 15 минут, а уже полдня ковыряюсь
Сервак на винде (там зенка должна стоять) плюс Openserver

PHP:
<?php

// Токен
define('BOT_TOKEN', '****************************');

// Параметры подключения к базе данных MySQL
$servername = "*************";
$username = "**************";
$password = "*************";
$database = "*************";

// Подключение к базе данных
$conn = new mysqli($servername, $username, $password, $database);
$conn->set_charset("utf8");

// Проверка соединения
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Получаем данные от Telegram
$update = json_decode(file_get_contents('php://input'), true);

// Проверяем, есть ли данные
if(isset($update)) {
    processUpdate($update);
}


// Функция для обработки обновлений
function processUpdate($update) {
    global $conn;
   
    // Получаем JSON-объект ответа от сервера Telegram
    $fullResponse = json_encode($update);
   
    // Получаем ID обновления
    $updateId = $update['update_id'];
   
    // Получаем тип обновления
    $updateType = $update['message']['chat']['type'];
   
    // Получаем ID чата
    $chatId = $update['message']['chat']['id'];

   
    // Преобразование текста в UTF-8
    $text = mb_convert_encoding($update['message']['text'], 'UTF-8', 'auto');
   
   
    // Добавляем обновление в базу данных
    $sql = "INSERT INTO updates (update_id, update_type, chat_id, message_text, fullResponse) VALUES ('$updateId', '$updateType', '$chatId', '$text', '$fullResponse')";
    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

}
// Закрываем соединение с базой данных
$conn->close();

?>
PHP:
<?php
// Параметры подключения к базе данных
$servername = '************';
$username = '***************';
$password = '*************';
$database = '*************';

// Подключение к базе данных
$conn = new mysqli($servername, $username, $password, $database);

// Проверка соединения
if ($conn->connect_error) {
    // Если соединение не удалось, выводим сообщение об ошибке
    die("Ошибка подключения к базе данных: " . $conn->connect_error);
} else {
    // Если соединение успешно, выводим сообщение об успешном подключении
    echo "Успешное подключение к базе данных! <br>";
}

// SQL запрос для добавления тестовой строки
$sql = "INSERT INTO updates (update_id, update_type, chat_id, message_text, fullResponse, user_ip, status)
        VALUES ('11115', '11111', '11111', '11111', '11111', '11111', '11111')";

// Выполнение запроса
if ($conn->query($sql) === TRUE) {
    echo "Новая запись успешно добавлена";
} else {
    echo "Ошибка при добавлении записи: " . $conn->error;
}

// Закрываем соединение
$conn->close();
?>
 

usboff

Client
Регистрация
25.08.2021
Сообщения
43
Благодарностей
20
Баллы
8
Гадать нет смысла. Выводи подробные логи и изучай файлы логов apache/nginx/mysql, там и найдешь разгадку что идёт не так.

PHP:
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
 
  • Спасибо
Реакции: Buddha и Moonwalker

kagorec

Client
Регистрация
24.08.2013
Сообщения
923
Благодарностей
476
Баллы
63
  • Спасибо
Реакции: Buddha

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Отличия в скрипте - во втором не устанавливается кодировка.
$conn->set_charset("utf8");
 
  • Спасибо
Реакции: Buddha

Buddha

Client
Регистрация
10.03.2019
Сообщения
121
Благодарностей
18
Баллы
18
Дело оказалось в том, что в таблице есть поле user_ip. Во втором скрипте оно прописано. А в первом нет. И на серваке база ругалась на то, что уэтого поля нет дефолтного значения. На хостинге проходит, а на севаке нет. Сделал значение по умолчанию NULL и все стало писаться.
Всем спасибо, кто мимо не прошел))
 
  • Спасибо
Реакции: WalkODoff и kagorec

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)