Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用mySQL转义逗号、冒号和单引号#_C#_Mysql - Fatal编程技术网

C# 在C中使用mySQL转义逗号、冒号和单引号#

C# 在C中使用mySQL转义逗号、冒号和单引号#,c#,mysql,C#,Mysql,---这是供个人使用的,所以不要担心SQL注入--- 我一直在浏览几个关于mySQL转义C的教程,但找不到一个适合我的(可能我只是用错了) 我正在尝试将数据插入mySQL数据库 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; using System

---这是供个人使用的,所以不要担心SQL注入---

我一直在浏览几个关于mySQL转义C的教程,但找不到一个适合我的(可能我只是用错了)

我正在尝试将数据插入mySQL数据库

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Diagnostics;
using System.Net;
using System.IO;
using System.Security.Cryptography;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace HASHSITE
{
    class Program
    {
        static void Main(string[] args)
        {
            bool success;
            int done = 0;

            string path = @"C:\Users\somePC\Documents\someFolder\somefile.txt";

            string server = "someIP";
            string database = "some_db";
            string uid = "some_dbu";
            string password = "pass";
            string connectionstring = "SERVER=" + server + ";DATABASE=" + database + ";UID=" + uid + ";PASSWORD=" + password + ";";

            using (var connection = new MySqlConnection(connectionstring))
            {
                connection.Open();
                using (var cmd = new MySqlCommand("INSERT INTO databases(data) VALUES(@name)", connection))
                {
                    var parameter = cmd.Parameters.Add("@name", MySqlDbType.LongText);
                    foreach(string line in File.ReadLines(path))
                    {
                        success = false;
                        while (!success)
                        {
                            parameter.Value = line;
                            cmd.ExecuteNonQuery(); //ERROR IS HERE
                            success = true;
                        }
                        done += 1;
                        Console.WriteLine("\n" + done);
                    }
                }
            }
        }
    }
}
我需要转义字符串行中的逗号

名字,name@name.com

错误:

附加信息:您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,了解使用near数据库(数据)值的正确语法


不要试图逃避任何事情,只要使用参数化SQL即可。您现在可能不关心SQL注入攻击,但在某个时候您会。。。通过对值使用参数化SQL,可以消除转义和注入攻击问题。哦,这样可以减少对类型转换的担忧。并使您的SQL更具可读性。这是一场全面的胜利

请注意,
DATABASES
是一个,因此您确实需要引用它,或者将表的名称更改为不那么麻烦的名称

// TODO: Specify the column name as well, for clarity if nothing else
cmd.CommandText = "INSERT INTO 'databases' VALUES(@name)";
// Adjust for your actual type
cmd.Parameters.Add("@name", MySqlDbType.LongText).Value = line;
...
请注意,您只想调用
cmd.Parameters.Add
一次,因此对于循环,您可能希望在循环外部调用它(并设置命令文本),然后只需在循环内部设置
属性

当你有疑问时,尽早养成做正确事情的习惯,而不是假设你以后会有时间改掉你的坏习惯

当您正在使用时,现在正是开始使用
语句的好时机。。。您可以重用几乎所有东西,只需在每次迭代中更改参数值:

using (var connection = new MySqlConnection(...))
{
    connection.Open();
    using (var command = new MySqlCommand("INSERT INTO 'databases' VALUES(@name)", connection)
    {
        var parameter = command.Parameters.Add("@name", MySqlDbType.LongText);
        foreach (...)
        {
            parameter.Value = line;
            command.ExecuteNonQuery();
        }
    }
}

编写这样的代码是SQL注入的第一步。使用参数绑定。嘿@lad2025我个人用它上传一些数据。它不会被分发,所以SQL注入现在不是问题,因为您连接了字符串,所以您创建了问题。只需绑定参数,您不需要转义它。您能给我该参数的代码吗?只需搜索
string.Format
我还将添加以明确指定列名
插入数据库(列名)值…
作为良好实践的一部分。谢谢您的建议。我遇到了相同的错误:MySql.Data.MySqlClient.MySqlException类型的未处理异常发生在MySql.Data.dll中。其他信息:您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,了解使用“数据库值”附近的正确语法(“意外,danepullen@yahoo.com,Graffiti'),位于第1行,位于cmd.ExecuteNonQuery()处;Jon,在
command=“INSERT INTO databases VALUES(“+line+”)”
line上出现了奇怪的错误消息,不是吗?我的意思是,它只是一个字符串连接。如果需要转义sql查询,则错误消息不会出现在
ExecuteNonQuery
行上?@SonerGönül:我个人怀疑这是一个诊断错误。我的错误是,错误消息出现在ExecuteNonQuery上,但这是因为我的声明不正确。我道歉。