Importing large databases sucks. It can take anywhere from as short as 10 min to a few hours. Worse is when it fails mid-import. So here is a faster & more reliable way to import. Disclaimer: This tutorial is only for macOS users. If you’re on windows, good luck. This script can import a 30gb database in under 40min, tested on Macbook M1. Prerequisites: Must use MAMP. Must have Homebrew installed. Install these using Brew brew install pv brew install pigz What it does, in steps: 3 arguments: gzipped SQL file, database name, MySQL user (defaults to root) Disables safety temporarily. Turns off foreign key checks, unique checks, binary logging. Cranks up InnoDB settings. Bigger buffer pool, less aggressive flushing to disk. Decompresses & imports. Uses the faster parallel gunzip (pigz) if available, otherwise falls back to regular gunzip. The pv command shows progress. Restores safety when done. Placing the fast import script Download the file from my GitLab fast_mysql_import.sh ...
Input Validation & Sanitisation Always use CI3's Form Validation library before processing any user input. Never use $_GET , $_POST , or $_REQUEST directly. Always go through $this->input . Always prevent XSS (Cross-Site Scripting) by using $this->security->xss_clean() for other texts not part of the form. Enabling global_xss_filtering in the config may break binary/JSON POST bodies. For APIs, handle XSS manually per field. Cross-Site Request Forgery ( CSRF ) Enable CSRF protection globally in config.php . Always use echo form_open(); since it automatically adds the CSRF token value. If you can't, then include <?= $this->security->get_csrf_token_name() ?> in every form (eg: ajax). SQL Injection Prevention NEVER concatenate user input into raw SQL. Avoid $this->db->query() with raw user input. Always use CI3's Query Builder or prepared statements with bindings . File Upload Security Use CI3's Upload library. Do not use move_upl...