【问题标题】:MySQL leading whitespace with C#MySQL 前导空格与 C#
【发布时间】:2017-03-01 23:02:36
【问题描述】:

当我更新 MySQL 数据库中的字段时,它总是在值中添加一个空格。 我尝试使用修剪命令和替换命令删除空格。他们都没有工作。所以我希望它不是空格,而是一些模糊的 ASCII 字符。这些是我使用的命令:

this.foo = result.GetValue(0).ToString().Trim();
this.bar = result.GetValue(0).ToString().Replace(" ","");

它更新的字段是一个 VARCHAR(xx)。这是我的 MySQL 更新命令:

            MySqlCommand cmd = new MySqlCommand("UPDATE " + table + " SET " + new_field + " =' " + new_value+ "' WHERE " + field+ "= " + value + "",this.con);

this.con 是我与 MySQL 数据库的连接。

仅供参考:我在 Visual Studio 2008 中使用 .NET 3.5CF 和 mysql.data.cf DLL。

有人可以帮我解决这个问题吗?快把我逼疯了。

【问题讨论】:

  • 使用某种打印命令确保变量进入查询之前没有前导空格,然后对查询行执行相同操作以确保在该阶段不添加它。如果这些都没有显示前导空格,那么我会说尝试不同的库,或者可能是不同的方法。大多数语言都有查询和执行方法,这似乎更通用,因为它说 sqlcommand 但仍然可能有更多方法可供使用

标签: c# mysql windows whitespace


【解决方案1】:

是的,你在 SQL 中有一个前导空格:

"UPDATE " + table + " SET " + new_field + " =' " + new_value+ "'

注意“=”后面的那个位 - 你有一个引号,然后是一个空格,然后是new_value

但是,您不应该首先将值直接放入 SQL 中 - 您应该使用参数化的 SQL 语句...目前您有一个 SQL 注入攻击等待发生,以及潜在的问题对于 诚实 值,其中包含引号。

您应该在这里为new_valuevalue 使用参数化SQL...我假设fieldtable 来自更多“可信”的来源?

【讨论】:

  • 查询只是一个测试。我无权访问“真实”数据库。所以为了测试我的程序,我只是用这些简单的查询创建了一个测试数据库。如果它可以访问,我将参数化查询中的所有值。
  • @BasPalmer:我认为值得养成参数化 all SQL 语句的习惯,这样您就永远不会意外地养成这种习惯“原型”代码打开了一个安全漏洞。
【解决方案2】:

这似乎有一个空格,其中 * 是

" ='*" + new_value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多