Skip to content

sshilko/php-sql-mydb

Repository files navigation

MyDb - Component

Project status - active Latest Stable Version Total Downloads PHP Required Version MIT License Psalm Coverage Code size
PHPUnit coverage PHPUnit classes coverage PHPUnit lines coverage PHPUnit methods coverage
8.1 Phan build 8.1 Psalm build 8.1 PHPMd build 8.1 PHPStan build 8.1 PHPCodeSniffer build 8.1 PHPDocumentor build 8.1 Pdepend build 8.1 PHPUnit build 8.0 PHPUnit build 8.1 PHPUnit build 8.2 PHPUnit build GithubPages build

Simple PHP client for MySQL database

Installation

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

Out of scope

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.

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

Authors

Sergei Shilko [email protected]