PHPStorm-Warnungen zu Platzhaltern in WordPress-Plugin-Abfragen

Lesezeit: 3 Minuten

Benutzer-Avatar
Elixenid

Ich habe ein WordPress-Plugin, das ich in PHPStorm bearbeite. PHPStorm findet Syntaxfehler bei Abfragen wie dieser, wenn der SQL-Dialekt auf MySQL eingestellt ist:

$foo = $wpdb->get_var(
           $wpdb->prepare(
               'SELECT `foo` FROM `some_table` WHERE `id` = %d',
               $bar
           )
       );

Insbesondere sieht es %d und beschwert sich mit dieser Nachricht:

<expression> expected, got '%'

Na sicher, %d ist ein absolut legitimer Platzhalter in WordPress-Abfragen. Gibt es eine Möglichkeit, PHPStorm so zu konfigurieren, dass dies akzeptiert wird? Oder muss ich alle Prüfungen für SQL-Anweisungen deaktivieren, wie in dieser Antwort vorgeschlagen?

Beachten Sie, dass ich PHPStorm EAP 8 (138.1751) verwende und dasselbe mit anderen Platzhaltern wie z %s.

Dies ist jetzt in PHPStorm 8 möglich, wie in diesem Beitrag im offiziellen PHPStorm-Blog erklärt wird:

Datenbank-Sprachinjektionskonfiguration

Um es zu lösen:

  • Gehen Sie zu Extras > Datenbanken
  • Stellen Sie sicher, dass sich in der Liste der benutzerdefinierten Parameter eine Regex befindet, die mit den betreffenden Platzhaltern übereinstimmt. Standardmäßig enthält die Liste \%\w+was passen wird %s, %detc.
  • Aktivieren Sie das Kontrollkästchen “String-Literale in anderen Sprachen verwenden”.

PHPStorm erkennt jetzt Platzhalter, wie sie in WordPress verwendet werden, korrekt.

  • Beachten Sie für spätere Versionen (2018.1), dass sich die Einstellung unter Datei -> Einstellungen -> Tools -> Datenbank -> Benutzerparameter befindet. Klicken Sie auf das grüne Pluszeichen rechts, um das Muster zu platzieren \%\w+ (Andere Artikel haben Anführungszeichen, aber dieser darf es nicht!). Aktivieren Sie die Kontrollkästchen “In Skripten” und “In Literalen” und wählen Sie die Sprache aus PHP

    – Nikola Miljković

    7. April 2018 um 14:54 Uhr

Benutzer-Avatar
LazyOne

Nö — %d ist aus SQL-Sicht keine gültige Syntax (jeder derzeit unterstützte Dialekt). Das WI-3672 und WI-2324 Eintrittskarten sind still gültig.

Aber PhpStorm v8 unterstützt jetzt $var (wenn Sie es stattdessen verwenden könnten % Syntax) — http://youtrack.jetbrains.com/issue/WI-2450


Da es sich um eine WordPress-spezifische Frage handelt, fällt es mir schwer, Ihnen einen wirklichen Vorschlag zu machen (zumal ich selbst kein WordPress verwende), außer diesem.

Aber im Allgemeinen könnten Sie native Platzhalter verwenden, die von einer bestimmten DB-Engine unterstützt werden (siehe Abschnitt „Beispiele“ in http://php.net/manual/en/pdo.prepare.php):

  • unbenannt ?
  • genannt :id

Ich bin mir nur nicht sicher, ob dies auf die WordPress-Entwicklung angewendet werden kann.


PS
Generic ist das neue Keywords only Dialekt — greifen Sie darauf zurück, wenn die Verwendung des richtigen SQL-Dialekts zu viele Warnungen/Fehler zeigt (die keine tatsächlichen Fehler sind).

  • Ja, ich bin mir bewusst, dass es sich um eine nicht standardmäßige SQL-Syntax handelt. Ich denke, es war der Versuch von WordPress, vorbereitete Anweisungen zu handhaben, bevor MySQLi und PDO auftauchten. Aber daran hänge ich jetzt fest es sei denn, ich roll meine eigene Datenbankverbindung mit PDO oder MySQLi. Verwenden Sie eine Literalvariable wie $var wird nicht funktionieren, weil es jede Art von Parametrisierung verhindert (ich müsste viel mehr Datenvalidierung, Konvertierung und Escapezeichen hinzufügen, als ich derzeit habe). Und “Keywords Only” ist nicht mehr als Dialekt verfügbar, also bin ich mir nicht einmal sicher, ob ich das verwenden kann.

    – Elixenid

    30. August 2014 um 21:33 Uhr

  • Probieren Sie „Allgemein“ anstelle von „Nur Keywords“ aus.

    – LazyOne

    30. August 2014 um 22:36 Uhr

  • Nun, ich war mir zu 100% sicher, dass ich das versucht hatte, aber anscheinend nicht. Ich musste die Codeinspektion „SQL-Dialekterkennung“ deaktivieren, um PHPStorm über meine Verwendung von „Generic“ als Dialekt glücklich zu machen. Leider scheint das grundsätzlich zu deaktivieren alle SQL-Prüfungen; es denkt das SELECT WHERE foo FROM bar sieht gut aus. Es scheint, als wäre dies das Beste, was ich im Moment tun kann. Wenn Sie also Ihren Kommentar zu Ihrer Antwort hinzufügen, werde ich ihn akzeptieren.

    – Elixenid

    30. August 2014 um 22:57 Uhr

  • Nun – „Allgemein“ ist das neue „Nur Keywords“

    – LazyOne

    31. August 2014 um 23:07 Uhr

1354640cookie-checkPHPStorm-Warnungen zu Platzhaltern in WordPress-Plugin-Abfragen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy