Add SQL parse error message when simulating DML

Fixes https://github.com/phpmyadmin/phpmyadmin/issues/18903

Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
This commit is contained in:
Maurício Meneghini Fauth 2025-04-21 22:37:38 -03:00
parent bf45b50122
commit 92efecc7f6
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
2 changed files with 29 additions and 0 deletions

View File

@ -81,6 +81,12 @@ final class SimulateDmlController extends AbstractController
private function process(Parser $parser): void
{
if ($parser->errors !== []) {
$this->error = $parser->errors[0]->getMessage();
return;
}
foreach ($parser->statements as $statement) {
if (
! $statement instanceof UpdateStatement && ! $statement instanceof DeleteStatement

View File

@ -280,4 +280,27 @@ class SimulateDmlControllerTest extends AbstractTestCase
],
];
}
public function testStatementWithParsingError(): void
{
$_POST['sql_delimiter'] = ';';
$GLOBALS['sql_query'] = 'UPDATE actor SET';
$responseRenderer = new ResponseRenderer();
$controller = new SimulateDmlController(
$responseRenderer,
new Template(),
new SimulateDml($this->createDatabaseInterface())
);
$controller();
$expectedMessage = <<<'HTML'
<div class="alert alert-danger" role="alert">
<img src="themes/dot.gif" title="" alt="" class="icon ic_s_error"> Missing assignment in SET operation.
</div>
HTML;
self::assertSame(['message' => $expectedMessage, 'sql_data' => false], $responseRenderer->getJSONResult());
}
}