https://github.com/sshilko/php-sql-mydb
PHP client for MySQL database
https://github.com/sshilko/php-sql-mydb
mysql php
Last synced: 7 months ago
JSON representation
PHP client for MySQL database
- Host: GitHub
- URL: https://github.com/sshilko/php-sql-mydb
- Owner: sshilko
- License: mit
- Created: 2022-07-24T12:39:37.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2025-08-24T20:26:43.000Z (7 months ago)
- Last Synced: 2025-08-24T20:58:44.807Z (7 months ago)
- Topics: mysql, php
- Language: PHP
- Homepage: http://sshilko.com/php-sql-mydb/php/
- Size: 130 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT
- Citation: CITATION
- Codeowners: .github/CODEOWNERS
- Security: .github/SECURITY
- Authors: AUTHORS
Awesome Lists containing this project
README
MyDb - Component
=================
Simple PHP client for MySQL database
#### Installation
```
composer require sshilko/php-sql-mydb
```
#### [Compatibility](https://sshilko.com/php-sql-mydb/php/)
- 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
- `TRADITIONAL` mode, a simple description of this mode is [“give an error instead of a warning”](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_traditional)
- Friendly transactions
- `autocommit = 0`
- explicit `commit` [on gracefull shutdown](https://dev.mysql.com/doc/refman/5.7/en/innodb-autocommit-commit-rollback.html)
- 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](https://dev.mysql.com/doc/refman/5.6/en/innodb-performance-ro-txn.html)
- 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](https://www.php.net/manual/en/intro.mysqlnd.php)
- 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](https://refactoring.guru/design-patterns/php) into existing codebase
#### Out of scope
This library is **not** intending to become a framework, to *keep focus* and minimize codebase, it does not provide
- Input [validation](https://symfony.com/doc/current/validation.html), [API](https://refactoring.guru/design-patterns/facade) facade
- [Object-relational mapping](https://en.wikipedia.org/wiki/Object–relational_mapping), ORM
- [Active record](https://en.wikipedia.org/wiki/Active_record_pattern) pattern
- [Repository](https://symfony.com/doc/current/doctrine.html#querying-for-objects-the-repository) pattern
- Import and export of data
please re-use existing solutions that best fit your requirements.
#### Why this library exists
* 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
#### Future roadmap
- MariaDB compatibility layer (variables and init command syntax is different between mysql and mariadb)
- MydbFactory responsible for initializing defaults
#### Contributing
* Please read [contributing](CONTRIBUTING) document
#### Authors
Sergei Shilko