phpClickHouse
PHP client for ClickHouse — fast, lightweight, zero dependencies beyond ext-curl.

Features
- Sync & async (parallel) SELECT queries
- Native query parameters — server-side
{name:Type} binding, SQL injection impossible
- Rich type system — Int64, Decimal, UUID, IPv4/IPv6, DateTime64, Date32, Map, Tuple
- Bulk inserts: arrays, CSV files, streams
- Generators — memory-efficient iteration for large resultsets
- HTTP compression (gzip) for inserts
- Parameter bindings & SQL templates
- Per-query settings — override ClickHouse settings per request
- Cluster support — auto-discovery, health checks, replicas
- Streaming read/write with closures
- Progress callbacks for SELECT and INSERT
- Structured exceptions — ClickHouse error name, query ID
- Sessions, write-to-file, INSERT statistics
- HTTPS, SSL CA, IPv6 support
- Multiple auth methods (none, header, basic auth, query string)
Installation
composer require smi2/phpclickhouse
Requires PHP 8.0+, ext-curl, ext-json.
Quick Start
$db = new ClickHouseDB\Client([
'host' => '127.0.0.1',
'port' => '8123',
'username' => 'default',
'password' => '',
]);
$db->database('default');
$db->setTimeout(10);
$db->setConnectTimeOut(5);
$db->ping(true);
Select
$statement = $db->select('SELECT * FROM my_table WHERE id = :id', ['id' => 42]);
$statement->rows(); // all rows
$statement->fetchOne(); // first row
$statement->count(); // row count
Native Query Parameters
$result = $db->selectWithParams(
'SELECT * FROM users WHERE id = {id:UInt32} AND name = {name:String}',
['id' => 42, 'name' => 'Alice']
);
Insert
$db->insert('my_table',
[
[time(), 'key1', 100],
[time(), 'key2', 200],
],
['event_time', 'key', 'value']
);
Generator (large resultsets)
foreach ($db->selectGenerator('SELECT * FROM huge_table') as $row) {
processRow($row);
}
Documentation
Core
| Guide |
Description |
| Quick Start & Basics |
Connection, select, insert, write, Statement API |
| Async Queries |
Parallel selects, batch file inserts, error handling |
| Bindings & Conditions |
Parameter binding, SQL templates, conditions |
| Settings & Configuration |
Timeouts, compression, HTTPS, auth methods, sessions |
Advanced
| Guide |
Description |
| Native Query Parameters |
Server-side {name:Type} binding |
| ClickHouse Types |
Int64, Decimal, UUID, IPv4/IPv6, DateTime64, Date32, Map, Tuple |
| Generators |
Memory-efficient selectGenerator() for large resultsets |
| Per-Query Settings |
Override settings per request |
| Streaming |
streamRead, streamWrite, closures, gzip |
| Cluster |
Multi-node setup, replicas, truncate, master node |
Reference
Version Compatibility
| PHP |
phpClickHouse |
| 5.6 |
<= 1.1.2 |
| 7.2 |
<= 1.3.10 |
| 7.3 |
1.4.x – 1.5.x |
| 8.0+ |
>= 1.6.0 |
Links