Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.216.83.240] |
|
Сообщ.
#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 как раз и занимается тем, что приводит передаваемые аргументы в надлежащий для выбранного типа БД вид. |