2017-02-23 252 views
1

Мы используем класс, который расширяет Mysqli на работе, и это добавляет другой синтаксис для подготовленных заявлений, что-то вроде:PhpStorm: добавить SQL диалект

<?php 
$req = MySQLiWrapperClass::getInstance()->prepare(' 
    INSERT INTO 
     table 
    SET 
     field = :field_value:s 
    ') 
    ->bindNamedValue('field_value', 'stackOverflow') 
    ->execute(); 

Класс будет затем преобразовать :field_value:s в ? перед выполнением запроса.

Проблема заключается в том, что при использовании диалекта MySQL SQL в PhpStorm этот синтаксис вызывает ошибку, потому что этот синтаксис не распознается.

Есть ли способ объявить новый SQL-диалект, в который я мог бы добавить этот конкретный синтаксис?

+0

Что делают ваши звучит точно так же, как синтаксис PDO (с дополнительным ободочной и типа придатка), который признает PhpStorm. Почему бы просто не использовать PDO вместо MySQLi? – Martin

+0

Я знаю, что это похоже на PDO, но у нас также есть некоторые другие синтаксические изменения, которые также не допускаются в PDO. –

+0

@martin, если добавить новый пользовательский диалект SQL пока невозможно, да, это был бы лучший ответ. –

ответ

3

Есть ли способ объявить новый SQL-диалект, в котором я мог бы добавить этот конкретный синтаксис?

Вы не можете добавить свой собственный SQL-диалект точно так же (это не настраивается через некоторый графический интерфейс).

Что я имею в виду: Да, вы можете, но вам нужно закодировать его как плагин на Java, сделать все необходимое - он будет работать.


Вопрос, который вы имеете здесь не имеет ничего общего с SQL Диалект - вы не предоставляет новые ключевые слова или фактический синтаксис запроса (или в таком духе).

Проблема в коде в пользовательского синтаксиса параметров (:field_value:s против :field_value).

Эту проблему можно решить, указав свой собственный синтаксис в Settings/Preferences | Tools | Database | User Parameters:

  • Выкройка: :(\w+\:[d|i|s])
  • Область применения: PHP & MySQL по крайней мере (на основе вашего образца кода)
  • Где: в literals по меньшей мере

Важно: порядок правил.

Вот что я сделал, и как это работает:

enter image description here

+0

Спасибо, он отлично работает! –