phpmyadmin / phpmyadmin/sql-parser

Re-formating LIMIT destroys DELETE and UPDATE queries

Offen
#252 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug
Vorherrschende Sprache
PHP
Sterne
485
Forks
119
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

When building queries, the LIMIT is re-formatted. For example SELECT * FROM tbl LIMIT 1 is changed to SELECT * FROM tbl LIMIT 0, 1. This works just fine for SELECT queries, but not for DELETE or UPDATE queries.

Example:

$query1 = "DELETE FROM a LIMIT 1";
$parser = new PhpMyAdmin\SqlParser\Parser($query1);
$statement = $parser->statements[0];

$table2 = new \PhpMyAdmin\SqlParser\Components\Expression("", "b", "", "");
$statement->from[0] = $table2;

echo $statement->build();

results in

DELETE  FROM `b` LIMIT 0, 1

The changed query fails, while the original query is perfect SQL.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne damit, das Problem mit dem im Bericht gezeigten Beispiel für den Parser-Konstruktor und statement->build() zu reproduzieren; verfolge anschließend, wie LIMIT für DELETE- und UPDATE-Anweisungen erstellt wird. Das Issue nennt keine Datei und keinen Test; abgeschlossen bedeutet, dass neu erstellte DELETE- und UPDATE-Abfragen eine gültige LIMIT-Syntax beibehalten, während das Verhalten von SELECT korrekt bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
mysql, php, sql
Bereich
database
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.