MySQL vs VS2017
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
    Правила раздела C/C++: Базы данных
  
    MySQL vs VS2017
    
  | 
         
         
         
          
           Сообщ.
           #1
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Доброе время суток. 
        
      Помогите, пожалуйста, разобраться с проблемой записи в таблицу БД MySQL. Работаю на Windows 10 64bit с использованием VS2017. Установил MySQL server 5.6. Использую коннектор от установленного сервер. 32бидное приложение сформировать не удалось: VS говорить, что не соответствует целевая платформа!      Подскажите, что я должен сделать, что бы формировать как 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 " Запись: ![]() ![]() 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кб для меня непреодолимый барьер С уважением, Дмитрий  | 
    
| 
         
         
         
          
           Сообщ.
           #2
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          1. Надо вывести в отладчик полностью проблемную команду. 
        
      2. Из того сообщения, что есть, скорее всего имеет место несоответствие типов, когда в поле, имеющее численный тип, пытаться установить символьное значение.  | 
    
| 
         
         
         
          
           Сообщ.
           #3
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата _agapa_ @  Помогите, пожалуйста, разобраться с проблемой записи в таблицу БД MySQL. Помогаю ...   1) Установи менеджер БД - Navicat. Если стеснен материальными обстоятельствами - то парни помогут, иначе сам. 2) В менеджере Navicat сформируй нужный тебе Query и запусти на выполнение 3) Если запрос вылетает с ошибкой - ищи, где ошибка синтаксиса (смотри по докам, и по версиям БД) 4) Как только у тебя запрос в Navicat'е заработал - начинай его переносить в код Не забывай!!! Что переменные, передаваемые в запрос - должны быть "отквочены", иначе это потенциальная точка SQL-инъекции. Очень похоже (я не в курсе) этим занимается твоя функция "mto_string" из твоего кода (перепроверь!) ... если "да", то супер. 5) Проверяй оформление передаваемых значений в запрос - цифры сами по себе, строки - в нужные кавычки (см.п.4)  | 
    
| 
         
         
         
          
           Сообщ.
           #4
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Доброе время суток 
        
      Спасибо за советы   [quote=JoeUser,1594068010,3833889]Что переменные, передаваемые в запрос - должны быть "отквочены"... Я так понимаю, преобразованы в строки? Во всех источниках, что я нашел, предлагался такой синтаксис команды...     | 
    
| 
         
         
         
          
           Сообщ.
           #5
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Это означает, что строковые величины в запросе должны быть такими как 'Vasiliy Pupkin', т.е. в обязательном порядке заключены в апострофы.   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #6
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата YuriyRusinov @  Это означает, что строковые величины в запросе должны быть такими как 'Vasiliy Pupkin', т.е. в обязательном порядке заключены в апострофы. Плюс ко всему - нужно смотреть что передается в строке. Допустим, нам нужно найти все записи, где поле содержит строку из одного апострофа. Если запрос "клеить" просто так - будет ошибка SQL. В различных либах применяются свои решения. Могу привести пример (не поиска конечно) для Qt: ![]() ![]() 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 как раз и занимается тем, что приводит передаваемые аргументы в надлежащий для выбранного типа БД вид.  |