2016-06-04 1 views
1

Я использую этот запросНеизвестного столбец «х» в «где предложение»

var query = $"SELECT id, username, password, salt FROM users WHERE username={username}"; 

Допуская username установлен toxic, ошибка брошена следующий:

Unknown column 'toxic' in 'where clause' 

Я уже пытался добавьте одинарные кавычки ('), сбросили еще одну ошибку (с ошибкой около «токсичных» в синтаксисе). Однако, интересно, что не так с этим запросом? Я разработал и нашел доказательства того, что это происходит из самого запроса.

+1

Текстовое поле, подобное имени пользователя, требует значений между кавычками. Однако попытайтесь прочитать, как использовать параметризованные запросы – Steve

+0

, он работал и для других запросов, поэтому я не видел необходимости делать это по-другому? Если даже так, я бы не знал, как, но – toxic

+0

Не могли бы вы добавить код с одинарными кавычками, которые вы использовали? – Steve

ответ

2

Если столбец username является текстовый столбец, то каждый раз, когда вы хотите произвести поиск по этому столбцу, буквальное значение должно быть заключено в одинарные кавычки

string username = "Steve"; 
var query = $"SELECT id, username, password, salt FROM users WHERE username='{username}'"; 

Однако это неправильный способ сделать текст запроса для двух основных задач:

Sql Injection: а tecnique использоваться хакерами, чтобы вставить в ваш код вредоносного текста, который может уничтожить ваши данные базы данных См: Sql Injection

Проблемы с анализом: Строки, содержащие одиночные кавычки, должны быть надлежащим образом отформатированы, десятичные значения должны быть преобразованы в строки с соответствующим десятичным разделителем, действующим для локали базы данных, даты .... ну ...

Таким образом, параметрический подход освободит вас от всех этих проблем

var query = @"SELECT id, username, password, salt 
       FROM users WHERE [email protected]"; 
using(MySqlConnection cnn = new MySqlConnection(.......)) 
using(MySqlCommand cmd = new MySqlCommand(query, cnn)) 
{ 
    cnn.Open(); 
    cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = username; 
    using(MySqlDataReader reader = cmd.ExecuteReader()) 
    { 
     ..... use your data 
    } 
} 
+0

Я использовал самозанятую оболочку MySql (с функцией async и т. Д.), И я добавил «cmd. Parameters.Add ... ". Оно работает. Благодаря! – toxic