![](/img/trans.png)
[英]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.