Simple PHP client for MySQL database
composer require sshilko/php-sql-mydb
- PHP 8.0, 8.1, 8.2
- MySQL >=5.7.8, 8.0
- MariaDB not compatible (TODO)
How this client helps you talk SQL to MySQL server
- Make MySQL behave like a “traditional” SQL database system
- Friendly transactions
- Explicit timeouts
- 05 seconds client-side connect-timeout
- 89 seconds server-side SELECT query timeout
- 90 seconds client-side read-timeout for any query
- 7200 seconds non-interactive connection idle timeout
- mysqlnd.net_read_timeout
- respect client disconnect in php-fpm function.ignore-user-abort.php
- Performance boost
- increased MYSQLI_OPT_NET_READ_BUFFER_SIZE
- increased MYSQLI_OPT_NET_CMD_BUFFER_SIZE
- read-only InnoDB optimizations
- READ COMMITED session transaction isolation level for readonly connections
- async command execution
- move mysql resultset to PHP userspace memory MYSQLI_STORE_RESULT_COPY_DATA
- use of fetch_all from PHP Mysql native driver
- UTF-8
- utf8mb4 character set
- UTC timezone
- Quality error handling
- PHP default error-reporting E_ALL & ~E_WARNING & ~E_NOTICE
- MySQL default error-reporting MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_STRICT ^ MYSQLI_REPORT_INDEX
- SIGTERM, SIGINT, SIGHUP signals trap
- connection retry
- PHPUnit & Static code analysis
- unit-tested, static analysed codebase
What is the best use-case for this library
- High performance, low-latency data-intensive applications
- No prepared statements requirement
- No 3rd party dependencies
- No run-time/compile-time steps
- Easy to start with and/or integrate into existing codebase
This library is not intending to become a framework, to keep focus and minimize codebase, it does not provide
please re-use existing solutions that best fit your requirements.
- MySQL database is fast, reliable and scalable, php runtime is the same
- Value developers time and do not add complexity where possible
- Measure app's performance with real-world datasets and organic load
- Optimize for my use-case, focus on bottlenecks, remember that there is no NoSQL silver bullet
- Do not optimize early - resources like CPU, memory are cheap
- Focus on building architecture, learn from others and improve over time
- MariaDB compatibility layer (variables and init command syntax is different between mysql and mariadb)
- MydbFactory responsible for initializing defaults
Sergei Shilko contact@sshilko.com