MySQL вставка большого объёма текста

Discussion in 'PHP' started by SQLHACK, 3 Feb 2009.

  1. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    Есть форма с текстовым полем, туда вставляется текст. Текст может быть в несколько мегабайт. Скрипт на пхп принимает этот текст и должен вставить его в MYSQL бд.
    Поле для вставки имеет тип LONGTEXT.
    Запрос имеет вид

    "INSERT INTO news (text) VALUES ('".mysql_real_escape_string($text)."')"

    Но при вставке текста 1,5 мегабайта, сервак возвращает
    #2006 - MySQL server has gone away

    Собственно вопрос, как вставить в БД текст в несколько метров, если прав на использование LOAD_FILE нет.
     
    _________________________
  2. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    558
    Likes Received:
    306
    Reputations:
    27
    Можно раздеялить на более мелкие части запрос.

    Фигасе, не легше уже файлом принемать данные для вставки?
     
  3. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    а из файла как вставлять ?
    LOAD_FILE отключен, тут не суть как принять данные. что они прямиком из текстового поля , что из файла в переменную идут.
     
    _________________________
  4. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Возникает когда дофига коннектов к серверу БД и при этом конфиг не оптимизирован... Можно подточить конфиг, и думаю, что всё будет нормально. А вообще полтора метра вставлять это жесть... Лучше сделать через аплоад файлов, а вставлять урлу...

    Ты просто пойми, что ты скорее всего, эти 1.5 метра передаёшь на сервер в режиме точка-к-точке, то есть он инициирует запрос, и ждёт от тебя полных данных, пока не наступает какой-то таймаут, и тебе вываливается эта ошибка... Разумеется, что операция вставки на самом сервере пройдёт в считанные секунды... В общем нужна оптимизация скрипта...
     
    #4 groundhog, 3 Feb 2009
    Last edited: 3 Feb 2009
  5. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    558
    Likes Received:
    306
    Reputations:
    27
    Цитирую:
    Может php закрывает конект до того как успевает вставить?
     
  6. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    2 SQLHACK:

    http://zalil.ru/upload/26611089

    скрипт, который позволит вставить в БД что хочешь любого размера
     
  7. AkyHa_MaTaTa

    AkyHa_MaTaTa Elder - Старейшина

    Joined:
    19 Mar 2007
    Messages:
    558
    Likes Received:
    306
    Reputations:
    27
    Наверно slil:
    http://slil.ru/26611089
     
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    SQLHACK Посмотреть SHOW VARIABLES на предмет max_allowed_packet - это собственно и будет максимальная длина строки которую можно передать/получить из БД.

    mysql_query('SET max_allowed_packet=16M'); у меня почему то не заработал, так что остается либо править конфиг мускуля - что вряд ли позволят, либо бить запрос на части

    http://dev.mysql.com/doc/refman/4.1/en/server-system-variables.html#sysvar_max_allowed_packet
     
    _________________________
  9. SQLHACK

    SQLHACK Остались только слоны

    Joined:
    27 Sep 2006
    Messages:
    437
    Likes Received:
    372
    Reputations:
    407
    вопрос решён
     
    _________________________
  10. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    я думал что max_allowed_packet=16M через хтач проще замутить... если не рпав - поправте...