首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL参数创建新用户

问使用MySQL参数创建新用户
EN

Stack Overflow用户
提问于 2019-06-14 07:23:42
回答 1查看 394关注 0票数 0

因此,我使用的是SQLServerVersion8.0.16,如果我试图动态创建一个新用户,我确实会收到一条错误消息: MySQL语法中有一个错误;检查与您的MySQL服务器版本对应的手册中是否有正确的语法。在$password行1<<处使用“1<<”。

我无法理解的是,如果我用实际值替换参数,然后用shell尝试它,它就能完美地工作。我让我的代码以root形式连接,并检查连接是否打开。因此,如果我进入代码并检查参数是否正确,一切看起来都很好。我还添加了>‘<<在应该替换参数的字符串的开头和结尾,但它没有更改错误或发生了什么。

代码语言:javascript
复制
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;
}

我希望它能创建一个新用户,但它没有。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-14 07:29:08

不,对于CREATE USER命令,我认为您不能同样地传递命令参数。而是使用字符串内插语法替换如下所示的值。

代码语言:javascript
复制
string query = $"CREATE USER '{name}@{host} IDENTIFIED BY {password}";

对于较早的C#版本,请考虑使用string.Format()

代码语言:javascript
复制
string query = string.Format("CREATE USER '{0}'@'{1}' IDENTIFIED BY '{2}'",name,host,password);

Per的评论:不能因为它不是DML操作。如果您担心SQL注入,可能是因为输入值来自用户输入,那么您将以某种方式对其进行清理,而且如果您观察到输入被引用。

同样,我建议这种管理操作应该在DB引导脚本中进行,而不是在应用程序代码中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56593368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档