[英]MySQL insert command using prepared statement and placeholders is not working
[英]Using variables with Mysql insert statement
我正在尝试将一些数据插入MySql数据库并成功建立连接并提交数据,但是我的变量保存为变量的实际名称,而不是我尝试分配的值。 我正在使用身份收集我的asp系统的登录用户,并从我的主页上的某些单选按钮列表中收集用户的分数。
我尝试为ID为12345
的用户和ID为4的用户保存具有ID的分数,它将保存单词Id和单词分数而不是数字。
这是我当前的代码:
if (score != 0) ;
{
string Id = User.Identity.GetUserId();
string MyConString = "SERVER=localhost;" +
"DATABASE=synther_physics;" +
"UID=root;" +
"PASSWORD=rootpass;";
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
MySqlDataReader Reader;
command.CommandText = "INSERT INTO userscores (Id, momentsandenergytestscore) VALUES ('Id','score');";
connection.Open();
Reader = command.ExecuteReader();
connection.Close();
}
第一件事是将变量直接放在语句中是不可以的,这会导致一个非常著名的问题,称为SQL Injection 。 为避免这种情况,我们将更改您的命令以使用parameters ,稍后将在其中填充变量
command.CommandText = "INSERT INTO userscores (Id, momentsandenergytestscore) VALUES (@Id,@score);";
然后,我们将在这两行中添加以您的变量填充参数
command.Parameters.AddWithValue("@Id", Id);
command.Parameters.AddWithValue("@score", score);
由于这不是SELECT语句,因此不需要阅读器。 您可以使用ExecuteNonQuery命令,该命令将返回受影响的行数(此INSERT语句应为1)。
int RowsAffected = command.ExecuteNonQuery();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.