Incorrect parsing of WHERE LIKE with parameter
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 45/100
Rechercherichtung
Beginnen Sie mit dem Tokenisierungsweg des Parser anhand des bereitgestellten Beispiels WHERE foo LIKE :bar und vergleichen Sie ihn mit den Fällen mit einer in Backticks gesetzten Spalte und =. Verfolgen Sie, warum die nicht in Anführungszeichen gesetzte Spalte, der LIKE-Operator und der benannte Parameter kombiniert werden, und fügen Sie anschließend einen Regressionstest hinzu, der zeigt, dass foo, Leerraum, LIKE, Leerraum und :bar separate Tokens sind.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
When trying to parse a WHERE clause such as WHERE foo LIKE :bar it returns foo LIKE : as a single token, where as I would expect it to return foo LIKE :bar as individual tokens. It doesn't have this issue when using back ticks on the columns, or = instead of LIKE.
Sample script:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use PhpMyAdmin\SqlParser\Parser;
use PhpMyAdmin\SqlParser\Token;
use PhpMyAdmin\SqlParser\TokensList;
$sql = 'SELECT * FROM test WHERE foo LIKE :bar';
echo 'sql: ' . $sql . PHP_EOL;
$parser = new Parser($sql);
foreach ($parser->list->tokens as $i => $token) {
echo 'token: ' . $token->token , PHP_EOL;
}
$sql = 'SELECT * FROM test WHERE `foo` LIKE :bar';
echo 'sql: ' . $sql . PHP_EOL;
$parser = new Parser($sql);
foreach ($parser->list->tokens as $i => $token) {
echo 'token: ' . $token->token , PHP_EOL;
}
$sql = 'SELECT * FROM test WHERE foo = :bar';
echo 'sql: ' . $sql . PHP_EOL;
$parser = new Parser($sql);
foreach ($parser->list->tokens as $i => $token) {
echo 'token: ' . $token->token , PHP_EOL;
}
Output:
sql: SELECT * FROM test WHERE foo LIKE :bar
token: SELECT
token:
token: *
token:
token: FROM
token:
token: test
token:
token: WHERE
token:
token: foo LIKE :
token: bar
token:
sql: SELECT * FROM test WHERE `foo` LIKE :bar
token: SELECT
token:
token: *
token:
token: FROM
token:
token: test
token:
token: WHERE
token:
token: `foo`
token:
token: LIKE
token:
token: :bar
token:
sql: SELECT * FROM test WHERE foo = :bar
token: SELECT
token:
token: *
token:
token: FROM
token:
token: test
token:
token: WHERE
token:
token: foo
token:
token: =
token:
token: :bar
token:
- Vorherrschende Sprache
- PHP
- Sterne
- 485
- Forks
- 119
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus phpmyadmin/sql-parser
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
phpmyadmin/sql-parser#655 · 1 Reaktion ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 55/100
phpmyadmin/sql-parser#666 ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 65/100
phpmyadmin/sql-parser#662 · 2 Reaktionen ·
-
kind/support
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
phpmyadmin/sql-parser#653 · 1 Reaktion ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 70/100
phpmyadmin/sql-parser#649 ·
Alle Issues in phpmyadmin/sql-parser
Ähnliche Issues
-
sync-en
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 85/100
-
sync-en
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 85/100
-
Перевод устарел
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
[6.x]: "Cannot use object of type stdClass as array" loading Users index (regression of #19182) Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100