Skip to content
This repository was archived by the owner on Jun 2, 2025. It is now read-only.

Undefined constant "DB_NAME" #40

Closed
bgrgicak opened this issue Mar 31, 2025 · 1 comment
Closed

Undefined constant "DB_NAME" #40

bgrgicak opened this issue Mar 31, 2025 · 1 comment

Comments

@bgrgicak
Copy link
Contributor

Sometimes DB_NAME isn't defined in a site which breaks the SQLite plugin.

I've observed this while testing Studio and importing a Jetpack backup.

Fatal error: Uncaught Error: Undefined constant "DB_NAME" in /var/www/html/wp-content/mu-plugins/sqlite-database-integration/wp-includes/sqlite/db.php:64
@JanJakes
Copy link
Contributor

adamziel pushed a commit to WordPress/wordpress-playground that referenced this issue May 30, 2025
## Motivation for the change, related issues

**This is a WIP draft at the moment. Looking for feedback on the
direction I'm taking here.**

The new SQLite driver requires the `DB_NAME` constant to be set. This is
to be able to store the correct database name in the information schema.
However, some WordPress site backups and exports don't include the
constant in `wp-config.php`. This happens with hosts that inject the
database configuration in a different way.

Even though we could probably emulate it dynamically in the SQLite
driver, this may be non-trivial, e.g., in cases someone joins on the
`information_schema.tables` table, etc.

Making sure that the constant is defined seems to be easier, and should
also improve the compatibility with any plugins that rely on the
`DB_NAME` constant to be set.

---

This was discovered when importing a site backup without the `DB_NAME`
constant in Studio:

```
Fatal error: Uncaught Error: Undefined constant "DB_NAME" in /var/www/html/wp-content/mu-plugins/sqlite-database-integration/wp-includes/sqlite/db.php:64 Stack trace: #0 /var/www/html/wp-content/db.php(37): require_once() #1 /var/www/html/wp-includes/load.php(683): require_once('/var/www/html/w...') #2 /var/www/html/wp-settings.php(133): require_wp_db() #3 /var/www/html/wp-config.php(85): require_once('/var/www/html/w...') #4 /var/www/html/wp-load.php(50): require_once('/var/www/html/w...') #5 /var/www/html/wp-blog-header.php(13): require_once('/var/www/html/w...') #6 /var/www/html/index.php(17): require('/var/www/html/w...') #7 {main} thrown in /var/www/html/wp-content/mu-plugins/sqlite-database-integration/wp-includes/sqlite/db.php on line 64
```

Related:
- Automattic/sqlite-database-integration#40
- Automattic/sqlite-database-integration#44

## Implementation details

## Testing Instructions (or ideally a Blueprint)
1. Boot Playground (`npm run dev`).
2. Export the site into a ZIP.
3. Remove the `DB_NAME` constant definition from the ZIP.
4. Import the site without the `DB_NAME` constant set.
5. Verify that a `DB_NAME` constant was injected (TODO: describe how).
6. Export the site ZIP and have the `DB_NAME` constant defined in
`wp-config.php` (TODO: is this required?).
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants