Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Не записываться данные в Mysql
Эта ошибка (HTTP 500 - внутренняя ошибка сервера) означает, что на веб-узле, который вы хотите посетить, имеется проблема, препятствующая отображению нужной веб-страницы.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Advisor пишет:
Подскажите пожалуйста, что не так с синтаксисом, а то я всю голову сломал
Проблема в вашем случае заключается в том что когда вы записываете данный SQL-запрос в строковую константу то оставляете для некоторых спецсимволов только один уровень экранирования - в то время как на самом деле нужна делать два уровня для разборщика строк инерптератора PHP и парсера SQL-запросов на сервере баз данных Конкретно запрос должен выглядеть примерно таким образом
Advisor пишет:
mysql_query("LOAD DATA INFILE '/home/customer/data/mod-tmp/ipl_userid_pricename.csv'
INTO TABLE ipl_user62_02 FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '\\\\' LINES STARTING BY '' TERMINATED BY '\\n'")
Если вы хотите каждый раз проверять какие символы подлежат вторичному экранированию - то можете использовать фунцию типа addslashes в которую уже впринципе можете помещать любой правильный SQL-запрос
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Advisor
Отправлено: 30 Июля, 2010 - 14:52:30
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
Спасибо. Я не учел двойное экранирование
JustUserR
Отправлено: 30 Июля, 2010 - 15:42:46
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Advisor пишет:
Спасибо. Я не учел двойное экранирование
Пожалуйста! Для проверки протизведенного экранирования на правильность и достаточность его уровня можно производить простую диагностику - а именно сохранять требуемые данные в обычную переменную и выводить ее в браузер и смотреть полученный исходный HTML-код Каким образом данные будут выглять в нем - точно также они будут передаваться в соответствующий вывод например SQL-серверу
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Advisor
Отправлено: 31 Июля, 2010 - 10:14:24
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
А вот модуль Jumi для Joomla (вставка любого кода на страницу) кушает экранирование при сохранении вставленного скрипта . Он вообще по-моему не любит левые слэши... Т.е. если было \\n получается \n, а при еще одном сохранении вообще n остается... Если это решить нельзя, то посоветуйте другой модуль для вставки кода на страницу, чтоб он таких гадостей не делал (Добавление)
Решил предыдущую проблему
Но возникла другая проблема, не знаю даже к какой теме отнести. После выполнения sql инструкции через php срабатывает logoff текущего пользователя! (инструкция - создание таблицы) Нигде не нашел решение...
JustUserR
Отправлено: 31 Июля, 2010 - 15:47:35
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Advisor пишет:
После выполнения sql инструкции через php срабатывает logoff текущего пользователя! (инструкция - создание таблицы)
Если вы имеете в виду отсоединение текущего SQL-пользователь в процессе работы PHP-скрипта после выполнения определенной инструкци - то дело может быть к примеру в отсутсвии прав доступа на создание таблицы и после возникновения ошибка SQL-сервер принудительно разрывает соединение В таком случае перед выполнение очередного SQL-запроса можно проверпять активность ресурса соединения - и если оно отсутствует то выполнять перезапуск
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Advisor
Отправлено: 31 Июля, 2010 - 21:23:55
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Июль 2010
Помог: 0 раз(а)
Во я нуб. зачем надо было писать mysql_close(); перед инструкцией? никто ни знает?
Спасибо. решил проблему
JustUserR
Отправлено: 01 Августа, 2010 - 02:36:05
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Advisor пишет:
Во я нуб. зачем надо было писать mysql_close(); перед инструкцией? никто ни знает?
Спасибо. решил проблему
На здоровье! Для автоматизации процесса вы можете создать свой собственный класс для работы с БД который сможет учитывать приведенные аспекты - например осуществлять экранирование нужного уровня для вводимых данных или осуществлять механизм препарирования - а также перед совершением SQL-запроса проверять наличие соединения с сервером БД которое могло оборваться и по причине наличия определенных лимитов Кроме того использования такого класса дает большую безопасность - поскольку все интерполируемые данные будут проходить обязательную обработку - а также благодаря размещению ресурса подключения в отдельной области видимости можно будет отслеживать неправильные вызовы функции mysql_real_escape_string
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.