mysql C# SQL SELECT WHERE< variable>LIKE %Column% - format?

nbysray5  于 2023-04-28  发布在  Mysql
关注(0)|答案(2)|浏览(97)

我现在使用这个语句:

"SELECT categoryDB, number FROM " + dbName+ " WHERE titleDBColumn ='" + titleInput+ "'";

这可以帮助我找到类似titleInput的字符串(这是一个来自外部的变量)。
但是,titleDBColumn中的值几乎总是比通过titleInput输入的值短的字符串。
示例:

titleDBColumn: Streetcar
titleInput: TheStreetCarIOwn

现在很明显,我需要在另一个方向使用LIKE运算符来获得我想要的结果,但我不能得到正确的格式。有什么想法吗?抱歉我不清楚。

7eumitmz

7eumitmz1#

这对我很有效:

"SELECT categoryDB, number FROM " + dbName + " WHERE '" +
titleInput + "' like '%" + titleDBColumn + "%'";
3yhwsihp

3yhwsihp2#

生成的SQL必须是

SELECT categoryDB, number
FROM tableName
WHERE 'input' LIKE '%' + titleDBColumn + '%'

%通配符表示“任何数量的任何字符”。也就是说,'input' LIKE '%' + titleDBColumn + '%'意味着输入文本可以在列文本之前和之后包含字符。
此外,应尽可能使用命令参数。对于称为dbName的表名,这是不可能的。如果这个名称是在代码中定义的,并且不是用户输入的,那么像您所做的那样连接它是安全的。但在其他方面采取措施防止SQL注入。

string sql = "SELECT categoryDB, number FROM `" + dbName +
         "` WHERE @input LIKE '%' + titleDBColumn + '%'";
using (var conn = new MySqlConnection(connStr)) {
    var cmd = new MySqlCommand(sql, conn);
    cmd.Parameters.AddWithValue("@input", titleInput);

    conn.Open();
    var reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        ...
    }
}

相关问题