Troubleshooting an Argument 1 passed ... must be an instance of PDOStatement Error

Symptom

When performing MySQL®-intensive actions, you may see the following errors:

TypeError: Argument 1 passed to Illuminate\Database\Connection::prepared() must be an instance of PDOStatement, bool given
Click to copy
TypeError: Argument 1 passed to WHMCS\Database\MysqlCompat::setLastStatement() must be an instance of PDOStatement or null, bool 
Click to copy

These generally occur during the daily automation cron tasks, when importing TLDs and pricing, or when syncing accounts into WHMCS from a server.

Cause

This may be due to the following causes:

  • The Module Log is enabled and the system is logging a large amount of data to the MySQL database.
  • The wait_timeout and interactive_timeout variables in the MySQL server configuration are too low to complete the request.

Solutions

Disable the Module Log

We recommend disabling the Module Log unless you are actively troubleshooting a module-related issue. We also recommend using the the default values for the wait_timeout and interactive_timeout variables in the MySQL server configuration.

To disable the Module Log:

1. Go to Configuration > System Logs.

2. Click Module Log in the left-side menu.

Module Log

3. Click Disable Debug Logging.

Correct the MySQL Server Configuration

For assistance with this change, contact your hosting provider or system administrator.

To update the wait_timeout and interactive_timeout values to use their defaults:

1. Open your MySQL server's /etc/mysql/my.cnf file.

2. Find the wait_timeout and interactive_timeout values:

[mysqld]
wait_timeout=28800
interactive_timeout=28800

3. Set both values to 28800 if they do not already use this value. For more information, see MySQL's wait_timeout and interactive_timeout documentation.

4. Save the changes to the file.

5. Restart your MySQL server by running the following command:

service mysql restart