MySQL Query Glitch - PullRequest
       7

MySQL Query Glitch

0 голосов
/ 18 ноября 2009

У меня есть сбой MySQL Query в моей программе VB.NET. Вот запрос в VB.NET:

"SELECT Points FROM user WHERE Username = '" & UsernameText.Text & "';"

Он выберет столбец точек из пользовательской таблицы из имени пользователя, которое они ввели. Когда я разверну это, он установит для баллов значение 0 на их аккаунте. Что не так? Я даже ничего не вставляю.

Ответы [ 4 ]

2 голосов
/ 18 ноября 2009

2 возможностей, которые я вижу:

  1. Какой-то другой код обновляет значение баллов
  2. SQL-инъекция:

Если значение в UsernameText.Text равно

blah'; update user set points = 0;--

Тогда результирующий SQL будет:

SELECT Points FROM user where Username = 'blah'; update user set points = 0;--';
2 голосов
/ 18 ноября 2009

Я точно не знаю, почему ваша таблица обновляется по запросу select. Но я точно знаю, что вы неправильно строите строку запроса. Вы должны сделать это следующим образом:

Using cn As New MySqlConnection("your connection string here"), _
      cmd As New MySqlCommand("SELECT points FROM user WHERE username= @UserName")

    cmd.Parameters.AddWithValue("@UserName", UsernameText.Text)
    cn.Open()

    ''# ExecuteReader or Fill command go here, connection will be automatically closed
    ''# when control falls out of the using block, even if an exception is thrown

End Using
1 голос
/ 18 ноября 2009

Запрос SELECT не может изменить значения, хранящиеся в базе данных. Это команда только для чтения. Либо значения были уже нулевыми, либо запрос возвращает только нули (несмотря на то, что хранится в базе данных), либо он вообще не возвращает строк.

Я предполагаю, что ваш запрос сформирован неправильно и не возвращает строк.

Возможно, в вашем коде VB.NET есть переменная, и ее начальное значение равно нулю, и оно должно быть переопределено при чтении результата запроса SQL. Когда SQL-запрос не возвращает строк, эта переменная сохраняет свое начальное нулевое значение.

Итак, попробуйте эксперимент: инициализируйте переменную points в -99 или что-то еще и попробуйте снова. Бьюсь об заклад, ваше приложение будет отображать -99.

Кроме того, я бы предположил, что данные в базе данных не изменились до нуля. Только то, что вы отображаете, по умолчанию равно нулю, потому что ваш SQL-запрос не работает.

Когда вы отлаживаете динамический SQL, вам нужно посмотреть на полный запрос SQL - после вы интерполируете в него любые динамические переменные. Трудно отлаживать, когда вы смотрите на строковое выражение VB.NET, которое создает запрос SQL. Это похоже на устранение проблем с автомобилем, посещая автомобильный завод.

0 голосов
/ 18 ноября 2009

В MySQl поля и таблицы в этом случае обозначаются апострофом / обратной косой чертой ...

"SELECT `Points` FROM `user` WHERE `Username`= '" & UsernameText.Text & "';"

Проверьте, работает ли это. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...