Krebrose Ответов: 1

Может ли кто - нибудь изменить этот SQL-запрос в формат mysql


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

Что я уже пробовал:

public void GetAllMessage(object state)
 {
     LBChat.Items.Clear();
     try
     {
         string messagequery = " SELECT * CLID, SenderID CASE WHEN SenderID = '" + LogInUser.UID + "' AND ReceiverID = '" + ReceiverId.Trim() + "' THEN 'You : ' + Message + ' ( Sent Time : ' + Convert( varchar(30), MessageDateTime ) + ' )' " +
                                 " WHEN ReceiverID =  '" + LogInUser.UID + "'  AND SenderID = '" + ReceiverId.Trim() + "' THEN 'Friend : '+ Message + ' ( Sent Time : ' +  Convert(varchar(30), MessageDateTime ) + ' )' " +
                                 " END " +
                                 " AS [Message] " +
                                 " , ReceiverID , MessageDateTime, UserIPAddress  " +
                                 " FROM chatlogs WHERE SenderID =  '" + LogInUser.UID + "'  AND ReceiverID = '" + ReceiverId.Trim() + "' OR ReceiverID =  '" + LogInUser.UID + "'  AND SenderID = '" + ReceiverId.Trim() + "' order by CLID; ";

         DataTable dt = DataBaseAccess.Retrive(messagequery);
         if (dt != null)
         {
             if (dt.Rows.Count > 0)
             {
                 foreach (DataRow item in dt.Rows)
                 {
                     LBChat.Items.Add(Convert.ToString(item[2]));
                 }
             }
         }
     }
     catch
     {

     }
 }

F-ES Sitecore

Что вы подразумеваете под "не работает"? Вы получаете ошибку, вы получаете неправильные данные, нет данных? Вы не позвонили бы механику и не спросили: "моя машина не работает, как мне ее починить"

Krebrose

никакие данные

1 Ответов

Рейтинг:
8

Patrice T

Просто неудачное " в сообщении, и ваш запрос вылетает! и, к сожалению, это наименьшая проблема, сообщение может быть намеренно создано, чтобы убить вашу базу данных.

string messagequery = " SELECT * CLID, SenderID CASE WHEN SenderID = '" + LogInUser.UID + "' AND ReceiverID = '" + ReceiverId.Trim() + "' THEN 'You : ' + Message + ' ( Sent Time : ' + Convert( varchar(30), MessageDateTime ) + ' )' " + ...

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Maciej Los

5ed!

Patrice T

Спасибо

Krebrose

Спасибо ребята