Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Verbindungsfehler, den ich noch nie gesehen habe

Warum verwenden Sie immer noch das fehlerhafte ODBC, um eine Verbindung zu MySql herzustellen, wenn es doch einen ADO.NET-Connector ? Was ist auch diese schreckliche Zeichenfolgenverkettung beim Erstellen Ihrer Abfrage?:

OdbcCommand cmd = new OdbcCommand("INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme, username, password) VALUES ('" + TextBox1.Text + "', '" + TextBox2.Text + "', '" + TextBox3.Text + "', '" + TextBox4.Text + "', '" + TextBox5.Text + "', '" + TextBox6.Text + "', '" + TextBox7.Text + "', '" + TextBox8.Text + "')", connection);

Haben Sie noch nie von SQL-Injektion gehört und parametrisierte Abfragen die erlauben, es zu vermeiden?

Alles, was ich sagen kann, ist, dass Sie den + verwenden Wenn Sie eine SQL-Abfrage schreiben, ist es, als würde man eine Waffe nehmen und direkt auf Ihren Fuß schießen (oder auf den Kopf, je nach Szenario, aber in allen Fällen schießen Sie auf sich selbst, im Grunde ein selbstmörderisches Verhalten).

Also, hier ist die richtige Vorgehensweise:

using (var conn = new MySqlConnection("Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
{
    conn.Open();
    using (var tx = conn.BeginTransaction())
    {
        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = "INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme, username, password) VALUES (@Email, @FirstName, @SecondName, @DOB, @Location, @Aboutme, @username, @password)";
            cmd.Parameters.AddWithValue("@Email", TextBox1.Text);
            cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text);
            cmd.Parameters.AddWithValue("@SecondName", TextBox3.Text);

            // TODO: might require a parsing if the column is of type date in SQL
            cmd.Parameters.AddWithValue("@DOB", TextBox4.Text);

            cmd.Parameters.AddWithValue("@Location", TextBox5.Text);
            cmd.Parameters.AddWithValue("@Aboutme", TextBox6.Text);
            cmd.Parameters.AddWithValue("@username", TextBox7.Text);
            cmd.Parameters.AddWithValue("@password", TextBox8.Text);
            cmd.ExecuteNonQuery();
        }

        using (var cmd = conn.CreateCommand())
        {
            cmd.CommandText = "select last_insert_id();";
            int id = Convert.ToInt32(cmd.ExecuteScalar());
            Label10.Text = Convert.ToString(id);
        }

        tx.Commit();
    }
}

Benennen Sie diese Textfelder auch entsprechend. Der arme Kerl, der diesen Code pflegen wird, könnte verzweifelte Schreie ausstoßen.