За последние 24 часа нас посетили 20667 программистов и 1576 роботов. Сейчас ищут 1080 программистов ...

Помогите разобраться с signed/unsigned

Тема в разделе "PHP для новичков", создана пользователем zer0day, 18 фев 2024.

  1. zer0day

    zer0day Активный пользователь

    С нами с:
    15 ноя 2019
    Сообщения:
    21
    Симпатии:
    0
    Есть код, вида

    Код (Text):
    1. $ip = ip2long(тут_айпи);
    Есть код работы с базой данных http://phpfaq.ru/safemysql , которым я делают INSERT в базу.

    Документация говорит, что "
    Ввиду того, что тип PHP integer является знаковым, и на 32-битных системах многие IP-адреса будут представлены в виде отрицательных чисел, необходимо использовать "%u" в функции sprintf() или printf() для получения IP-адреса в строковом беззнаковом виде. "

    Т.е. ip2long возвращает signed Int. Но MYSQL по каким-то причинам требует указывать UNSIGNED int, иначе mismatch.
     
  2. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    289
    Симпатии:
    21
    ну вот они и предлагают преобразовывать перед сохранением через printf("%u\n". Если система 32 битная

    это древнее что то. Используйте подготовленные запросы, pdo


    тип столбца наверное такой
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    @zer0day в PHP нет типа unsigned, поэтому всё что ты можешь — это получить текстовое представление "как если бы это число было беззнаковым". Об этом и написано в цитируемом тексте. Делай как предлагают и будет тебе счастье.
     
  4. Aleksandr.B

    Aleksandr.B Новичок

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    Сколько вмещает int в вашей системе.
    echo(PHP_INT_MAX); В моей 9223372036854775807 поэтому ip2long формирует число, которое выше диапазона int signed базы данных. По всей видимости на 32 разрядной архитектуре будут отрицательные значения, которые помещаются signed.
     
  5. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    444
    Симпатии:
    87
    Адрес:
    Бавария, Германия
    Добрый день!
    Адреса IPv4 и IPv6 можно так сохранять и выбирать из MYSQL:
    Создайте в таблице поле ip type varbinary(16)
    Код (Text):
    1. INSERT INTO `test` (`ip`) VALUES (INET6_ATON('127.0.0.1'))
    2. -> 0x7f000001
    3. SELECT INET6_NTOA(ip) FROM `test`
    4. -> 127.0.0.1
    5.  
    6. INSERT INTO `test` (`ip`) VALUES (INET6_ATON('2001:db8:3333:4444:5555:6666:7777:8888'))
    7. -> 0x20010db8333344445555666677778888
    8.  
    9. SELECT INET6_NTOA(ip) FROM `test`
    10. -> 2001:db8:3333:4444:5555:6666:7777:8888
    Удачи!
     
    #5 Vladimir Kheifets, 19 фев 2024
    Последнее редактирование: 19 фев 2024
  6. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    444
    Симпатии:
    87
    Адрес:
    Бавария, Германия
    Hi Jessica,
    the question is completely off topic, but jetlement has no right to ignore the lady’s question.

    Лично у меня нет преподчений между PHP и JavaScript.
    Оба языка необходимио хорошо знать и применять при разработке Вебприложений.
    Основное отличие этих языков в предназначение и среде исполнения.
    PHP исполняется на серверах и предназначен для взамодействия с различными серверными приложениями, например, СУБД,
    а JavaScript исполпяется на стороне клиента в браузерах и позволяет организовать интерфейс пользователя т.е. обработку событий, например, нажатие на клавиатуру или клик мышки и.т.п.

    Good luck!
     
    #6 Vladimir Kheifets, 20 фев 2024
    Последнее редактирование модератором: 21 фев 2024