За последние 24 часа нас посетили 17764 программиста и 1703 робота. Сейчас ищут 940 программистов ...

Как записать массив в базу mysqli.

Тема в разделе "PHP и базы данных", создана пользователем wadim, 5 янв 2017.

  1. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    Всем привет! Запись везде почти происходит, но в 1-2 местах ни как. Вот приблизительный код(основной слишком большой чтобы приводить):

    PHP:
    1. $arr13= array('100','93','94');
    2. $StrSerialize= json_encode($arr13);
    3.  
    4. mysqli_query($myConnect, "INSERT INTO `Fron` (id, Fron) VALUES ('{$str}', '{$StrSerialize}') ");
    в коде выше произошла начальное заполнение базы, с этим проблем нет точно и большая часть программы с такой базой работает, далее:

    читаем с базы:

    PHP:
    1. $arrFron= json_decode($arr[Fron]);
    изменяем данные (тут и начинаются проблемы, не с изменением, а с записью далее):

    PHP:
    1. $arrFron[]= strval($arrSmegnie2[$i9]);
    запись в базу:

    PHP:
    1. $StrSerialize= json_encode($arrFron);
    2.  
    3. mysqli_query($myConnect, "UPDATE `{$Fron}` SET `Fron` = '{$StrSerialize}' WHERE `id` = '{$id}' LIMIT 1 ");
    Запись вообще не происходит, проблема в изменении данных, по идее все должно работать, я думаю косячные функции типа json_encode и
    Serialize, есть ли другие методы записи массива в базу? Не хочется писать свой json_encode.

    Данные записи-чтения:

    После начального заполнения базы имеем: ["94"]
    после изменения данных при последующей записи в базу имеем: ["94","100"]

    То есть перед конечной записью(та которая не работает) я проверяю что пишу и меня устраивает, так как ["94","100"] это то что нужно, но запись не происходит. Возможно там пробелы или спец символы, которые не видны, ни знаю почему не пишет. Скорее что-то происходит на стадии изменения данных, но там ни чего не должно происходить, так как я далеко не первый раз программирую и не представляю как более профессионально там написать код, там нет или почти нет вариантов. Вину валю на json_encode. Поле Fron имеет тип text.
     
    #1 wadim, 5 янв 2017
    Последнее редактирование модератором: 5 янв 2017
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    эскейпить надо данные при записи, а нето катурач
     
  3. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    Cделал так: $str= str_replace("'","\'",$str);
    Не помогло.
    Сделал так: $str= mysql_real_escape_string($str);
    Пишет: Предупреждение : mysql_real_escape_string () [ function.mysql-реального выхода строка ]: Доступ запрещен для пользователя 'a3932495' @ "локальный" (не используя пароль: НЕТ) в /home/
    Знаю что может быть такое, как правильно?
     
    #3 wadim, 5 янв 2017
    Последнее редактирование: 5 янв 2017
  4. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    C mysql_real_escape_string разобрался, но массив все-равно не записывается в базу.
     
  5. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    покажи запрос, который получается перед отправкой в бд, когда не записывает
     
  6. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    а что происходит? Логи может посмотришь?
    А зачем массив писать в базу?
    Потом надеюсь поиск по этим значениям в базе не будешь делать?
     
  7. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    запрос
    PHP:
    1. $StrSerialize= json_encode($arrFron);
    2. mysqli_query($myConnect, "UPDATE `{$Fron}` SET `Fron` = '{$StrSerialize}' WHERE `id` = '{$id}' LIMIT 1 ");
    Вообще бывает что раз запишет и все, если взять другие данные, то этим запросом записываются.

    Запускаю на хостинге, но на том хостинге сейчас по моему вообще отключили логи. Писать в базу нужно для сохранения данных и к этим данным с разных скриптов происходит обращение, если есть другой вариант - пишите, за ранее спасибо. Делаю поиск, в том числе выбрав строку из базы, сделав массив, найдя значение в массиве, далее добавив другое значение в массив, далее массив в строку и в базу.
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тебе надо сначала скопить его в переменную, а потом только скармливать функции. Вот тогда ты сможешь вывести значение этой переменной, и посмотрим на запрос.
     
  9. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    Не очень понял как правильно сделать, можно код? Спасибо.
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    PHP:
    1. $sql = "запрос пишешь сюда";
    2. echo $sql;
    3. mysqli_query($myConnect, $sql);
     
  11. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    Сделал, не работает, echo вывел: UPDATE `Fron_5ba0dc0b4bf9a9b611dd2773c80239ce` SET `Fron` = '100,93,94,200' WHERE `id` = '00001ka8d9cc0' LIMIT 1
    Выходит запрос правильный? Была строка 100,93,94, в запросе правильно произошло добавление цифры 200: 100,93,94,200
    Правда все-равно ни знаю правильный ли запрос. Почему запись не произошла?
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    не понял. Данные обновились. Про какую запись идет речь?
     
  13. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    Запись измененной строки (100,93,94,200) в базу mysqli
     
  14. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это хз. Вставь в управлялку базой данных и посмотри что напишет. Может у тебя где-то тупо опечатка.
     
  16. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    ТС-у:
    - INSERT INTO `Fron` ...
    - UPDATE `Fron_5ba0dc0b4bf9a9b611dd2773c80239ce` ...
     
  17. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    Опечатки не может быть, ведь другие данные пишутся. Поясните пожалуйста что значит сие:
    ТС-у:
    - INSERT INTO `Fron` ...
    - UPDATE `Fron_5ba0dc0b4bf9a9b611dd2773c80239ce` ...
     
  18. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    имя таблицу у тебя Fron_5ba0dc0b4bf9a9b611dd2773c80239ce ?
     
  19. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
  20. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Попробуй получившиеся запрос выполнить в PHPMyAdmin и посмотреть если не будет ошибок и всё сработает как тебе нужно.

    Вставляешь значит в таблицу с другим именем?
     
  21. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    Не с именем все в порядке, вопрос сам решил, всем спасибо.
     
  22. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) ты серьёзно? мы всем форумом тебе помогали, а ты даже не расскажешь?
     
    denis01 нравится это.
  23. wadim

    wadim Новичок

    С нами с:
    4 янв 2017
    Сообщения:
    11
    Симпатии:
    1
    Там была логическая ошибка в коде.
     
    denis01 нравится это.