Ловить ошибку - самый простой и надёжный способ: оборачиваешь INSERT или UPDATE в try/catch (если используешь PDO) и обрабатываешь PDOException. База сама сообщает, что данные не подходят по типу или длине.
try {
$stmt = $pdo->prepare("INSERT INTO table (field) VALUES (:val)");
$stmt->execute(['val' => $data]);
} catch (PDOException $e) {
echo "Данные не подошли: " . $e->getMessage();
}
Проверить заранее без SELECT можно вручную. Для строк: проверяешь длину через strlen() или mb_strlen() и сравниваешь с длиной поля в MySQL (VARCHAR(255) → 255 символов). Для чисел — проверяешь диапазон: TINYINT — от -128 до 127 и так далее.
$maxLength = 255;
if (mb_strlen($data) > $maxLength) {
echo "Данные слишком длинные!";
}
Если заранее знаешь структуру поля, можно полностью контролировать данные без лишних запросов.