ReservedWordCheckController.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers\Table\Structure;
  4. use PhpMyAdmin\Controllers\Table\AbstractController;
  5. use PhpMyAdmin\SqlParser\Context;
  6. use function _ngettext;
  7. use function count;
  8. use function implode;
  9. use function sprintf;
  10. use function trim;
  11. final class ReservedWordCheckController extends AbstractController
  12. {
  13. public function __invoke(): void
  14. {
  15. if ($GLOBALS['cfg']['ReservedWordDisableWarning'] !== false) {
  16. $this->response->setRequestStatus(false);
  17. return;
  18. }
  19. $columns_names = $_POST['field_name'];
  20. $reserved_keywords_names = [];
  21. foreach ($columns_names as $column) {
  22. if (! Context::isKeyword(trim($column), true)) {
  23. continue;
  24. }
  25. $reserved_keywords_names[] = trim($column);
  26. }
  27. if (Context::isKeyword(trim($this->table), true)) {
  28. $reserved_keywords_names[] = trim($this->table);
  29. }
  30. if (count($reserved_keywords_names) === 0) {
  31. $this->response->setRequestStatus(false);
  32. }
  33. $this->response->addJSON(
  34. 'message',
  35. sprintf(
  36. _ngettext(
  37. 'The name \'%s\' is a MySQL reserved keyword.',
  38. 'The names \'%s\' are MySQL reserved keywords.',
  39. count($reserved_keywords_names)
  40. ),
  41. implode(',', $reserved_keywords_names)
  42. )
  43. );
  44. }
  45. }