SQL中单引号和双引号有什么用?[复制]

What is the use of single and double quotes in SQL? [duplicate]

提问人:Yabaz Thampi 提问时间:4/26/2019 最后编辑:Andrew MortonYabaz Thampi 更新时间:4/26/2019 访问量:685

问:

我正在将字符串或数字传递给 SQL 查询。

单引号和双引号内的单引号是什么意思?

select * from college where class = '"+txtclass.Text+"'

select * from college where class = '+txtclass.Text+'
C# asp.net SQL Server 引项

评论

0赞 jarlh 4/26/2019
@SudiptaMondalm这种联系引发的问题多于答案......
1赞 Andrew Morton 4/26/2019
第一个示例似乎是断章取义的:看起来代码正在连接字符串以进行查询。(这是错误的做法:应该使用 SQL 参数将参数传递给查询。
0赞 Yabaz Thampi 4/26/2019
@jarlh 我正在使用 SQL Server
6赞 marc_s 4/26/2019
另外:你不应该将你的SQL与用户提供的值连接起来,这样 - 这是对SQL注入的开放。无论您使用哪种数据库系统,都很可能支持参数化查询之类的东西 - 使用这些查询可以避免SQL注入 - 并且使许多与报价相关的问题也消失了
1赞 Andrew Morton 4/26/2019
@marc_s 看起来这是从一行 C# 中截取的片段。您的编辑可能会混淆这一点。

答:

-1赞 Camadas 4/26/2019 #1

应使用 SqlCommand 的参数。

这里有一个小例子来说明如何做到这一点:

using (var con = new SqlConnection("conection string"))
{
    con.Open();
    using (var cmd = con.CreateCommand())
    {
        // Here is where we add the parameters into the Sql Query, this way it will prevent SQL Injection
        cmd.CommandText = "select * from college where class = @class";
        // Now we add the value to the parameter @class, I'm assuming here that the column class is a NVarchar
        cmd.Parameters.Add("@class", SqlDbType.NVarChar).Value = txtclass.Text;
        using (var dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                // Do some code
            }
            dr.Close();
        }
    }
}

这个例子是针对 Sql 的,但也可以对 MySql 做同样的事情,我们只需要使用 MySql 类,其余的都是一样的

注意:我知道这并不能回答已经提出的问题,但是由于他的方式存在安全风险,我决定举一个简单的例子如何使其更安全,因为在对问题的评论中给出了答案

评论

1赞 SMor 4/26/2019
不要使用 addwithvalue
0赞 Camadas 4/26/2019
嗯,感谢您的警告,我确实使用了 AddWithValue,因为它需要更少的代码。需要多研究一点,以便我可以更改必须删除 AddWithValue 的解决方案
1赞 Andrew Morton 4/29/2019
@Camadas 应指定字符串参数的大小,否则它可能默认为 1 并以静默方式截断数据。