2015-10-27 7 views
0

Я использую nodeJs и mysql-пакет.ошибка в синтаксисе LIKE SQL

Я хочу использовать инструкцию LIKE sql с varibale.

это исходный код:

var likemobile = '%'+mobile; 
var query = "SELECT vtiger_contactaddress.contactaddressid as 'leadid', 
        vtiger_contactaddress.mobile, 
        vtiger_contactaddress.phone 
      FROM `vtiger_contactaddress` 
      INNER JOIN `vtiger_crmentity` 
       ON vtiger_crmentity.crmid=vtiger_contactaddress.contactaddressid AND 
        vtiger_crmentity.deleted=0 AND 
        vtiger_contactaddress.mobile LIKE "+likemobile+" OR 
        vtiger_contactaddress.phone LIKE "+likemobile; 

и это ошибка, которая возвращает:

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual th 
at corresponds to your MySQL server version for the right syntax to use near '%8 
8436500 OR vtiger_leadaddress.phone LIKE %88436500' at line 1 
+1

Кажется, вы должны обернуть например, с одинарными кавычками: «LIKE» + likemobile и закройте строку запроса с помощью двойной кавычки. как это: "<...> LIKE" + likemobile + «; – Alex

+0

@Alex вы можете показать мне, как – Alyreza

+1

@Alyreza вы можете попробовать ниже редактировать ..., как запрос должен иметь '% 8 8436500%' ИЛИ ​​vtiger_leadaddress.phone LIKE? '% 88436500%' этот тип синтаксиса –

ответ

1

Если вы действительно используете node-mysql, вы должны выполнять запросы, как указано в the documentation. Предполагая, что у вас есть connection объекта уже, запрашивая с переменным связыванием становится простым:

connection.query({ 
    sql : "SELECT vtiger_contactaddress.contactaddressid as leadid, " 
        + " vtiger_contactaddress.mobile, " 
        + " vtiger_contactaddress.phone " 
      + "FROM `vtiger_contactaddress` " 
      + "INNER JOIN `vtiger_crmentity` " 
      + " ON vtiger_crmentity.crmid=vtiger_contactaddress.contactaddressid" 
      + " AND vtiger_crmentity.deleted=0 AND " 
      + "  (vtiger_contactaddress.mobile LIKE concat('%', ?) OR " 
      + "  vtiger_contactaddress.phone LIKE concat('%', ?))", 
    values: [mobile, mobile] 
}, function (error, results, fields) { 
    // error will be an Error if one occurred during the query 
    // results will contain the results of the query 
    // fields will contain information about the returned results fields (if any) 
}); 

вещь отметить здесь: используется

  • Bind переменных, предотвращая SQL Injection
  • concat функции используются для префиксов (дезинфицированный) ввод с подстановочным символом (%)
  • Два условия запроса, которые являются OR ed, равны n вл разделяться скобкой от vtiger_crmentity.deleted=0, который, вероятно, что вы хотите
  • Вы должны написать Resultset код обработки в функции обратного вызова, доступ к данным через results и fields переменных
4

Вам нужно заключить как шаблон в одинарные кавычки.

Две другие предложения:

  • использовать только одиночные кавычки для строк и даты констант (не столбец псевдонимов).
  • Используйте параметризованные запросы, чтобы вы не вводили пользовательский ввод в строки запроса.
1
try this.. 

     var likemobile = mobile; 

var query = "SELECT vtiger_contactaddress.contactaddressid as 'leadid', 
       vtiger_contactaddress.mobile, 
       vtiger_contactaddress.phone 
     FROM `vtiger_contactaddress` 
     INNER JOIN `vtiger_crmentity` 
      ON vtiger_crmentity.crmid=vtiger_contactaddress.contactaddressid AND 
       vtiger_crmentity.deleted=0 AND 
       vtiger_contactaddress.mobile LIKE '% "+likemobile+"%' OR 
       vtiger_contactaddress.phone LIKE '%"+likemobile +"%'"; 
+0

Что такое «ценность»?! – Alyreza

+1

Исправлено ... редактирование. –

+0

нет, в чем отличия? в вопросе я предопределил это. но я мой и твой не работает – Alyreza

1

@Gordon Linoff правильно. Somelike это:

var likemobile = mobile; 
var query = "SELECT vtiger_contactaddress.contactaddressid as 'leadid', vtiger_contactaddress.mobile, vtiger_contactaddress.phone FROM `vtiger_contactaddress` INNER JOIN `vtiger_crmentity` ON vtiger_crmentity.crmid=vtiger_contactaddress.contactaddressid AND vtiger_crmentity.deleted=0 AND vtiger_contactaddress.mobile LIKE '%"+likemobile+"%' OR vtiger_contactaddress.phone LIKE '%"+likemobile+"%'"; 
1
... AND vtiger_contactaddress.mobile LIKE '%" + likemobile + "%' OR vtiger_contactaddress.phone LIKE %" + likemobile + "%"; 
+0

nope, такая же ошибка произойдет. "Error: ER_PARSE_ERROR: У вас есть ошибка в синтаксисе SQL; проверьте руководство th в соответствии с вашей версией сервера MySQL для правильного синтаксиса для использования рядом с '% 8 8436500 ИЛИ vtiger_leadaddress.phone LIKE% 88436500' в строке 1' – Alyreza

+1

отредактировано, возможно, кавычки неправильные, я не могу проверить это сейчас ;-) – juankirr

Смежные вопросы