guvijur
@guvijur
Практик, кинестетик, ретроград и консерватор

Почему код не может записать в БД определённое строковое значение?

PHP 5.3. мини-проектом, точнее php-скриптом, который должен искать в почтовом ящике определённые письма и формировать на их основе запись в таблице в скрипте есть вызов функции, которой параметров:
createDismissedTask($taskId, $subject, $messageText, $fromEmail, $deadline);
ID предварительно созданной записи для задачи, передаю тему письма, передаю текст письма, передаю e-mail отправителя и передаю крайнюю дату выполнения.
функцию:
function createDismissedTask($taskId, $title, $description, $fromEmail, $deadline) {
    // Предполагается, что переменная $setSql определена вне функции
    global $setSql;

    // Получаем объект пользователя, который послал письмо, содержащий всю информацию о пользователе
    $tSource = getUserInfo($fromEmail);
    
    $description = mysqli_real_escape_string($setSql, $description);

    $sql = "UPDATE `tasks` SET `pid` = '33', `zakaz` = '" . $tSource->id . "', `ispol` = '0', `daten` = NOW(), `dateo` = '0000-00-00 00:00:00', `status` = '9', `tupetasks` = '188', `title` = '" . $title . "', `descr` = '" . $description . "', `vote` = '0', `executor` = '0', `ip` = '192.168.11.2', `ball` = '0', `podr` = '33', `podrout` = '" . $tSource->podr . "', `region` = '1', `doch` = '0', `ndatetletask` = '" . $deadline . "', `prigla` = '12865', `lock` = '', `lock_time` = '0000-00-00 00:00:00', `cartridge` = '0', `notify` = '1', `tracker` = '0', `requestid` = '0', `hidden` = '0' WHERE `id` = '" . $taskId . "'";
    $res = mysqli_query($setSql, $sql);

    if ($res) {
        // Для отладки уже написал, чтобы функция возвращала описание:
        return "ВЕРНУЛ: " . $description . "!!!!!!!!!!!!!!!!!!!!!!!";
    } else {
        return "Error: " . mysqli_error($setSql);
    }

}


содержимое аргумента $description не записывается поле `descr`. Поле `descr` имеет тип "longtext"
Может не передаётся текст?
Вот так работает:
$messageText = "Какой-то текст любой длины...";
createDismissedTask($taskId, $subject, $messageText, $fromEmail, $deadline);
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ошибка, скорее всего, возникает из-за символов в $description, не попадающих в кодировку поля `description`. Такой эффект, например, дают новые эмодзи, требующие utf8mb4.
Также стоит включить режим выброса исключений для всех ошибок Mysqli, перейти на драйвер mysqlnd, если ещё не сделали этого, и использовать подготовленные выражения.
Рекомендую прочитать статью: https://habr.com/ru/articles/662523/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы