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');