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)
- Make MySQL behave like a “traditional” SQL database system
- TRADITIONALmode, a simple description of this mode is “give an error instead of a warning”
 
- Friendly transactions
- autocommit = 0
- explicit commiton gracefull shutdown
 
- Explicit timeouts
- 05 seconds client-sideconnect-timeout
- 89 seconds server-sideSELECT query timeout
- 90 seconds client-sideread-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
 
- 05 seconds 
- 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_allfrom PHP Mysql native driver
 
- increased 
- UTF-8
- utf8mb4character set
- UTCtimezone
 
- 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, SIGHUPsignals trap
- connection retry
 
- PHP default error-reporting 
- PHPUnit & Static code analysis
- unit-tested, static analysed codebase
 
- 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
- Input validation, API facade
- Object-relational mapping, ORM
- Active record pattern
- Repository pattern
- Import and export of data
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 NoSQLsilver 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
- Please read contributing document
Sergei Shilko contact@sshilko.com