因此,我使用的是SQLServerVersion8.0.16,如果我试图动态创建一个新用户,我确实会收到一条错误消息: MySQL语法中有一个错误;检查与您的MySQL服务器版本对应的手册中是否有正确的语法。在$password行1<<处使用“1<<”。
我无法理解的是,如果我用实际值替换参数,然后用shell尝试它,它就能完美地工作。我让我的代码以root形式连接,并检查连接是否打开。因此,如果我进入代码并检查参数是否正确,一切看起来都很好。我还添加了>‘<<在应该替换参数的字符串的开头和结尾,但它没有更改错误或发生了什么。
public bool CreateNewUser(string name, string password, string host)
{
string query = "CREATE USER $name@$host IDENTIFIED BY $password;";
List<MySqlParameter> mies = new List<MySqlParameter>
{
new MySqlParameter("$name", name),
new MySqlParameter("$password", password),
new MySqlParameter("$host", host)
};
return InsertIntoQuery(query, mies);
}
//The InsertIntoQuery looks like this
private bool InsertIntoQuery(string sql, List<MySqlParameter> sqlParameters = null)
{
bool retBl = false;
try
{
using (var SqlConnection = new MySqlConnection(ConnectionStr))
{
SqlConnection.Open();
using (var cmd = new MySqlCommand(sql, SqlConnection))
{
if (sqlParameters != null)
foreach (var item in sqlParameters)
cmd.Parameters.AddWithValue(item.ParameterName, item.Value);
cmd.Prepare();
var retValNonQuery = cmd.ExecuteNonQuery();
retBl = (retValNonQuery > 0) ? true : false;
}
}
}
catch (Exception e)
{
MessageBox.Show("Error: " + e.Message);
}
return retBl;
}我希望它能创建一个新用户,但它没有。
发布于 2019-06-14 07:29:08
不,对于CREATE USER命令,我认为您不能同样地传递命令参数。而是使用字符串内插语法替换如下所示的值。
string query = $"CREATE USER '{name}@{host} IDENTIFIED BY {password}";对于较早的C#版本,请考虑使用string.Format()
string query = string.Format("CREATE USER '{0}'@'{1}' IDENTIFIED BY '{2}'",name,host,password);Per的评论:不能因为它不是DML操作。如果您担心SQL注入,可能是因为输入值来自用户输入,那么您将以某种方式对其进行清理,而且如果您观察到输入被引用。
同样,我建议这种管理操作应该在DB引导脚本中进行,而不是在应用程序代码中。
https://stackoverflow.com/questions/56593368
复制相似问题