Troubleshooting

Database package issues and fixes.

Query Issues

Query returns empty

Problem: QueryBuilder returns empty array for existing data.

Cause: Wrong table name or prefix.

Fix: Verify full table name:

// Check actual table name
$table = $context->tableName('users');
echo $table; // wp_myplugin_users

// Verify table exists
global $wpdb;
$exists = $wpdb->get_var("SHOW TABLES LIKE '{$table}'");

"Table doesn't exist" error

Problem: Query fails with missing table error.

Cause: Migrations not run or wrong environment.

Fix: Run migrations and verify:

wp zylos migrate

Wrong data types returned

Problem: Integers return as strings.

Cause: $wpdb returns strings by default.

Fix: Cast appropriately:

$count = (int) $db->getVar("SELECT COUNT(*) FROM {$table}");

QueryBuilder Issues

Where clause not filtering

Problem: where('status', 'active') returns all rows.

Cause: Column name mismatch.

Fix: Check column exists:

// Verify column name
$columns = $db->getResults("DESCRIBE {$table}");

Order by not working

Problem: Results not sorted.

Cause: Invalid column name — orderBy() validates names against /^[a-zA-Z_][a-zA-Z0-9_]*$/. Special characters or SQL keywords as column names will throw InvalidArgumentException.

Fix: Use valid column names and validate user input:

// QueryBuilder validates column names automatically
$db->table('products')->orderBy('created_at', 'DESC')->get();

// For user-controlled sort columns, whitelist before passing
$allowed = ['created_at', 'name', 'id'];
$column = in_array($sortBy, $allowed, true) ? $sortBy : 'created_at';
$db->table('products')->orderBy($column, 'DESC')->get();

Connection Issues

"No database selected"

Problem: Query fails with database error.

Cause: Connection lost or wrong DB name.

Fix: Check WordPress configuration:

// wp-config.php
define('DB_NAME', 'wordpress');
define('DB_HOST', 'localhost');