【问题标题】:Cannot convert values ​into mysql无法将值转换为mysql
【发布时间】:2021-03-25 17:44:25
【问题描述】:

我想将变量的值输入到 MySql 数据库中,但它给了我这个错误:

我使用这样的代码:

ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("insert into data_nasabah(nama_nasabah,tanggal,debit/kredit,saldo,no_rekening)values('"+ns[0].nama+"','"+Date()+"','"+ns[0].dk[0]+"','"+ns[0].saldo[0]+"','"+rekening[n]+"')");

ADOQuery1->ExecSQL();

【问题讨论】:

  • debit/kredit 不是 SQL 中列的有效名称。因为/ 字符。
  • @dratenik 实际上,debit/kredit 在 MySQL 中有效,但需要引用为 `debit/kredit`"debit/kredit",请参阅 MySQL 文档中的 9.2 Schema Object Names
  • @RemyLebeau 好的,我不知道。不过,这似乎是个坏主意(例如:this question :))。

标签: c++ mysql xampp interface-builder


【解决方案1】:

包含特殊字符的列名需要用` 引用,或者ANSI_QUOTES 模式下的"。请参阅 MySQL 文档中的 9.2 Schema Object Names

试试这个:

ADOQuery1->SQL->Text = "insert into data_nasabah (nama_nasabah, tanggal, `debit/kredit`, saldo, no_rekening) values ('" + ns[0].nama + "','" + Date() + "','" + ns[0].dk[0] + "','" + ns[0].saldo[0] + "','" + rekening[n] + "')";

但是,不要像您一样手动格式化 SQL 语句参数!这会受到SQL Injection 攻击。您可以使用Sysutils::QuotedStr()(或Sysutils::AnsiQuotedStr())来避免这种情况,例如:

ADOQuery1->SQL->Text = "insert into data_nasabah (nama_nasabah, tanggal, `debit/kredit`, saldo, no_rekening) values (" + QuotedStr(ns[0].nama) + "," + QuotedStr(Date()) + "," + QuotedStr(ns[0].dk[0]) + "," + QuotedStr(ns[0].saldo[0]) + "," + QuotedStr(rekening[n]) + ")";

但是,您确实应该使用parameterized query,让数据库引擎为您处理引用,例如:

// make sure to set ADOQuery1->ParamCheck=true beforehand!

ADOQuery1->SQL->Text = "insert into data_nasabah (nama_nasabah, tanggal, `debit/kredit`, saldo, no_rekening) values (:PNamaNasabah, :PTanggal, :PDebitKredit, :PSaldo, :PNoRekening)";

ADOQuery1->Parameters->ParamByName("PNamaNasabah")->Value = ns[0].nama;
ADOQuery1->Parameters->ParamByName("PTanggal")->Value = Date();
ADOQuery1->Parameters->ParamByName("PDebitKredit")->Value = ns[0].dk[0];
ADOQuery1->Parameters->ParamByName("PSaldo")->Value = ns[0].saldo[0];
ADOQuery1->Parameters->ParamByName("PNoRekening")->Value = rekening[n];

ADOQuery1->ExecSQL();

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 2011-06-05
    • 2022-11-21
    • 2013-01-21
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多