0

我将 RichTextBox 的单词与数据库进行比较。但是如果我在带有单引号的richtextbox 中写单词,那么这个程序会引发异常。


使用原始和野蛮方法杀死“以色列人”的例子。
在这句话中,“以色列”这个词有单引号,所以这个词破坏了程序。
我写了以下代码。

private void btnSeparte_Click(object sender, EventArgs e)
            {                    
                string MyConString = "server=localhost;" +
                "database=sentiwordnet;" + "password=zia;" +
                "User Id=root;";
                MySqlConnection con = new MySqlConnection(MyConString);
                string line = rtbEmotion.Text;
                Regex replacer = new Regex(@"\b(is|are|am|could|will|the|you|'|not|I|in)\b|(\b\d\b)");
                line = replacer.Replace(line, "");
                string[] parts = Regex.Split(line, " ");
                foreach (string part in parts)
                {

                    MySqlCommand cmd = new MySqlCommand("select * from score where Word='" + part + "'", con);
                    con.Close();
                    con.Open();
                    MySqlDataReader r = cmd.ExecuteReader();

                    if (r.Read())
                    {


                        txtBxPosEmot.Text = r["Pos"].ToString();
                        TxtBoxNeg.Text = r["Neg"].ToString();
                        pos = Convert.ToDouble(txtBxPosEmot.Text);
                        neg = Convert.ToDouble(TxtBoxNeg.Text);
                        listView1.Items.Add(part);
                        listView1.Items.Add(pos.ToString());
                        listView2.Items.Add(part);
                        listView2.Items.Add(neg.ToString());
                        pos1 = pos + pos1;
                        neg1 = neg + neg1;
                        r.Close();
                        con.Close();

                    }

                    else
                    {
                        textBox1.Text = "";
                        txtbPosSyth.Text = "";
                        r.Close();
                        con.Close();
                    }
               }
          }    

异常
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“Israels”附近使用的正确语法

4

3 回答 3

9

这是经典的 SQL 注入。在 SQL 中,语句用单引号括起来......所以你的单引号过早地结束了你的语句,因为你没有转义它。这也使您容易受到恶意用户的攻击。您必须使用参数化 SQL 来避免它。见: http: //www.dotnetperls.com/sqlparameter

于 2013-05-31T20:51:30.303 回答
0

如果您想要对您所看到的行为进行解释,您的正则表达式不会'在您的输入中捕捉到,因为它必须被单词边界包围,在您的情况下,它不是。

你的正则表达式中断的原因是因为'它本身会导致一个单词边界,所以它必须被字母包围。

您的正则表达式不考虑这一点。

于 2013-05-31T20:59:02.613 回答
0

描述

如果您只想替换'被困在一个单词中,那么您可以使用以下正则表达式。

(?<=\w\b)['](?=\b\w)

在此处输入图像描述

例子

包含这个 php 例程是为了简单地显示正则表达式的工作原理。

<?php
$sourcestring="She said 'hi, this is Sam's house'. 
'The 'quick red f'ox jumpe'd over the 'laz'y brown dog.'";
echo preg_replace('/(?<=\w\b)[\'](?=\b\w)/im','',$sourcestring);
?>

$sourcestring after replacement:
She said 'hi, this is Sams house'. 
'The 'quick red fox jumped over the 'lazy brown dog.'
于 2013-06-01T03:02:34.057 回答