На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > MySQL vs VS2017
      Доброе время суток.
      Помогите, пожалуйста, разобраться с проблемой записи в таблицу БД MySQL. Работаю на Windows 10 64bit с использованием VS2017. Установил MySQL server 5.6. Использую коннектор от установленного сервер.

      32бидное приложение сформировать не удалось: VS говорить, что не соответствует целевая платформа! :blink: :unsure: Подскажите, что я должен сделать, что бы формировать как 32бит, так и 64?

      Сформировал 64бит проект и пытаюсь записать данные в таблицу, но получаю ошибку:

      "
      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order,data,error,cn0Er,cn0D) VALUES (NULL,'2','-0.00108263','7.48124e-12','0','0' at line 1
      "
      Запись:
      ExpandedWrap disabled
        void CMyDB::_writetoCN0(int n,double data_,double err_,bool er_,bool D_)
        {      
            int query_state;
            std::string oder = mto_string(n);
            std::string data = mto_string(data_);
            std::string err = mto_string(err_);
            std::string berr = mto_string((er_)?1:0);
            std::string bD = mto_string((D_)?1:0);
            
            std::string command = "INSERT INTO earth_potential.cn0 (id,order,data,error,cn0Er,cn0D) VALUES (NULL,\
        '" + oder + "','" + data + "','" + err + "','" + berr + "','" + bD + "')";
            
            query_state = mysql_query(mysqlDB,command.c_str());
            if (query_state != 0)
                printf_s("\n%s\n",mysql_error(mysqlDB));
        }


      Таблица в БД:
      ...
      Хотел вставить файл с изображением формата таблицы в БД, куда я пытаюсь поместить данные, но 237.6кб для меня непреодолимый барьер

      С уважением, Дмитрий
        1. Надо вывести в отладчик полностью проблемную команду.
        2. Из того сообщения, что есть, скорее всего имеет место несоответствие типов, когда в поле, имеющее численный тип, пытаться установить символьное значение.
          Цитата _agapa_ @
          Помогите, пожалуйста, разобраться с проблемой записи в таблицу БД MySQL.

          Помогаю ... :)

          1) Установи менеджер БД - Navicat. Если стеснен материальными обстоятельствами - то парни помогут, иначе сам.
          2) В менеджере Navicat сформируй нужный тебе Query и запусти на выполнение
          3) Если запрос вылетает с ошибкой - ищи, где ошибка синтаксиса (смотри по докам, и по версиям БД)
          4) Как только у тебя запрос в Navicat'е заработал - начинай его переносить в код

          Не забывай!!!

          Что переменные, передаваемые в запрос - должны быть "отквочены", иначе это потенциальная точка SQL-инъекции. Очень похоже (я не в курсе) этим занимается твоя функция "mto_string" из твоего кода (перепроверь!) ... если "да", то супер.

          5) Проверяй оформление передаваемых значений в запрос - цифры сами по себе, строки - в нужные кавычки (см.п.4)
            Доброе время суток
            Спасибо за советы :thanks:
            [quote=JoeUser,1594068010,3833889]Что переменные, передаваемые в запрос - должны быть "отквочены"...
            Я так понимаю, преобразованы в строки?
            Во всех источниках, что я нашел, предлагался такой синтаксис команды... :unsure:
              Это означает, что строковые величины в запросе должны быть такими как 'Vasiliy Pupkin', т.е. в обязательном порядке заключены в апострофы.
                Цитата YuriyRusinov @
                Это означает, что строковые величины в запросе должны быть такими как 'Vasiliy Pupkin', т.е. в обязательном порядке заключены в апострофы.

                Плюс ко всему - нужно смотреть что передается в строке. Допустим, нам нужно найти все записи, где поле содержит строку из одного апострофа. Если запрос "клеить" просто так - будет ошибка SQL. В различных либах применяются свои решения. Могу привести пример (не поиска конечно) для Qt:

                ExpandedWrap disabled
                  QSqlQuery query;
                  query.prepare("INSERT INTO employee (id, name, salary) "
                                    "VALUES (:id, :name, :salary)");
                  query.bindValue(":id", 1001);
                  query.bindValue(":name", "Thad Beaumont"); // <--- вот тут строка может быть даже '
                  query.bindValue(":salary", 65000);
                  query.exec();

                В коде выше метод .bindValue как раз и занимается тем, что приводит передаваемые аргументы в надлежащий для выбранного типа БД вид.
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0501 ]   [ 15 queries used ]   [ Generated: 2.08.21, 00:40 GMT ]