Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   php как проверить что данные не в лазят в тип mysql (https://javascript.ru/forum/server/86362-php-kak-proverit-chto-dannye-ne-v-lazyat-v-tip-mysql.html)

wadim2 19.03.2025 20:04

php как проверить что данные не в лазят в тип mysql
 
Всем привет! php как проверить что данные не в лазят в тип mysql, то есть не влазят в поле базы. В таких случаях вылазит ошибка. Нужно красивое решение. Делать SELECT не хочу, лишний запрос к базе. Можно ошибку ловить, но как её грамотно поймать? Это первое что хочется знать. Второе. Как всё же без ловли ошибки и лишнего запроса проверить что данные влезут в поле базы?

Nexus 20.03.2025 03:29

А просто увеличить размер поля, чтобы ошибка «data too long» не падала не вариант?

voraa 20.03.2025 06:53

Перед записью в базу проверять длину.

ksa 20.03.2025 09:02

Цитата:

Сообщение от voraa
Перед записью в базу проверять длину.

Я так понял, суть проблемы что заранее не известна та самая длина... :-?

micscr 20.03.2025 09:07

На всех входящих от пользователя данных, должны стоять php валидаторы, и только когда их проходит, дальше что то с этими данными делаешь, например вставляешь в sql

akiraki22lvl 18.09.2025 14:03

Ловить ошибку - самый простой и надёжный способ: оборачиваешь 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 "Данные слишком длинные!";
}


Если заранее знаешь структуру поля, можно полностью контролировать данные без лишних запросов.


Часовой пояс GMT +3, время: 18:05.