Почему база данных MySQL отклоняет попытку вставить конкретное строковое значение из кода?

Как можно переделать функцию `createDismissedTask`, чтобы избежать использования глобальных переменных, но при этом сохранить функциональность скрипта для записи данных в таблицу MySQL, учитывая ограничения PHP 5.3?
  • 20 февраля 2024 г. 7:38
Ответы на вопрос 2
1. MySQL может отклонять попытку вставки конкретного строкового значения из-за различных причин, таких как тип данных, ограничения на длину строки, наличие специальных символов и другие. Возможно, необходимо проверить, соответствуют ли данные строковому типу и формату столбца в таблице базы данных.

2. Для переделки функции `createDismissedTask` без использования глобальных переменных, можно передавать необходимые данные в качестве параметров функции. Примерно так:

```php
function createDismissedTask($taskName, $taskDescription, $dismissedReason) {
    $conn = new mysqli($servername, $username, $password, $dbname);

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "INSERT INTO dismissed_tasks (task_name, task_description, dismissed_reason) VALUES (?, ?, ?)";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("sss", $taskName, $taskDescription, $dismissedReason);

    if ($stmt->execute()) {
        echo "Dismissed task created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $stmt->close();
    $conn->close();
}

$taskName = "Task 1";
$taskDescription = "Description of Task 1";
$dismissedReason = "Not relevant anymore";

createDismissedTask($taskName, $taskDescription, $dismissedReason);
```

Таким образом, функция `createDismissedTask` теперь принимает три параметра: название задачи, описание задачи и причину отклонения. Глобальные переменные больше не используются, данные передаются напрямую в функцию при её вызове.
Ошибка, скорее всего, возникает из-за символов в $description, не попадающих в кодировку поля `description`. Такой эффект, например, дают новые эмодзи, требующие utf8mb4. 
Также стоит включить режим выброса исключений для всех ошибок Mysqli, перейти на драйвер mysqlnd, если ещё не сделали этого, и использовать подготовленные выражения.
Рекомендую прочитать статью: https://habr.com/ru/articles/662523/
Похожие вопросы