{"id":33956884,"url":"https://github.com/sairoko12/query-builder","last_synced_at":"2026-04-24T07:34:21.271Z","repository":{"id":62539428,"uuid":"77566625","full_name":"sairoko12/query-builder","owner":"sairoko12","description":"Easy SQL builder","archived":false,"fork":false,"pushed_at":"2017-07-24T03:05:53.000Z","size":13,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-02-22T18:47:18.353Z","etag":null,"topics":["mysql","pdo","query-builder","sql"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sairoko12.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-28T23:04:02.000Z","updated_at":"2017-02-20T17:38:34.000Z","dependencies_parsed_at":"2022-11-02T15:30:49.024Z","dependency_job_id":null,"html_url":"https://github.com/sairoko12/query-builder","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/sairoko12/query-builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sairoko12%2Fquery-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sairoko12%2Fquery-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sairoko12%2Fquery-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sairoko12%2Fquery-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sairoko12","download_url":"https://codeload.github.com/sairoko12/query-builder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sairoko12%2Fquery-builder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32214417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T03:15:14.334Z","status":"ssl_error","status_checked_at":"2026-04-24T03:15:11.608Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mysql","pdo","query-builder","sql"],"created_at":"2025-12-12T20:50:14.954Z","updated_at":"2026-04-24T07:34:21.266Z","avatar_url":"https://github.com/sairoko12.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Query builder\nSimple and fast query builder, no more query strings in your code\n\n## Features\n- [PDO](http://php.net/manual/en/book.pdo.php) support\n- Simple fetch result\n- Easy usage\n- Easy installation via composer\n- SQL transaction support\n- Stored Procedures support\n- Table Alias support\n- Super **where** method **_:\\\\/_**\n\n## Future features\n- Avoid auto commit within transaction\n- Subqueries support between joins\n- **_Put your features here_** ;)\n\n### Installation\n\n```bash\ncomposer require sairoko/query-builder \"1.*\"\n```\n\n##### Or add dependency in *`composer.json`* file\n\n```js\n{\n\t...\n\t\"require\": {\n\t\t\"sairoko/query-builder\": \"1.*\"\n\t},\n\t...\n}\n```\n\n\n### *SELECT* Example\n\nThe assembly's method always returns your current SQL string query\n\n```PHP\n// Set database connection\nrequire './vendor/autoload.php';\n\n$config = array(\n\t'driver' =\u003e 'mysql',\n\t'host' =\u003e '127.0.0.1',\n\t'port' =\u003e '3306',\n\t'database' =\u003e 'DATABASENAME',\n\t'user' =\u003e 'root',\n\t'password' =\u003e 'root'\n);\n\n$database = new \\Sairoko\\QB($config);\n\n// You can use only query builder without connection\n$database = new \\Sairoko\\QB;\n\n// Simple select *\n$database-\u003efrom('table');\n// Produce SELECT * FROM table;\n$database-\u003etable('tablename');\n// You can use alias 'table'\n\n// Select fields to fetch\n$database-\u003eselect(['field1', 'field2'])-\u003efrom('table');\n// Produce SELECT field1,field2 FROM table\n$database-\u003eselect('field1');\n// Support string as parameter\n\n// Select with where condition\n$database-\u003efrom('table')-\u003ewhere('field2', 'foo');\n// Produce SELECT * FROM table WHERE field2 = 'foo';\n\n// Fetch all rows result\n$database-\u003efrom('table')-\u003eall();\n// Select fields with 'all' method\n$database-\u003efrom('table')-\u003eall(['field1', 'field2']);\n// Fetch result for SELECT field1,field2 FROM table;\n\n//Fetch first row\n$database-\u003efrom('table')-\u003erow();\n// Select fields with 'row' method\n$database-\u003efrom('table')-\u003erow(['field1','field2']);\n// Fetch first row for SELECT field1,field2 FROM table;\n\n// Get SQL string\n$query = $database-\u003eselect(['field1', 'field2'])-\u003efrom('table')-\u003eassemble();\necho $query;\n```\n\n### Powerful *WHERE*\n\nWhere method return `QB` object\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB;\n\n$database-\u003efrom('table')-\u003ewhere('field1', 10);\n// Produce SELECT * FROM table WHERE field1 = 10;\n$database-\u003efrom('table')-\u003ewhere('field1', 'foo');\n// Produce SELECT * FROM table WHERE field1 = 'foo';\n// Autodetection for numeric values, in string add quotes\n\n$database-\u003efrom('table')-\u003ewhere('field1 \u003c\u003e ?', 15);\n// Use '?' as wildcard\n\n$database-\u003efrom('table')-\u003ewhereIn('field1', [1,'foo',3]);\n// Produce SELECT * FROM table WHERE field1 IN(1,'foo',3);\n\n$database-\u003efrom('table')-\u003ewhereNotIn('field1', [1,2,3]);\n// Produce SELECT * FROM table WHERE field1 NOT IN(1,2,3);\n\n$database-\u003efrom('table')-\u003ewhereBetween('field1', [10, 100]);\n// Produce SELECT * FROM table WHERE field1 BETWEEN 10 AND 100;\n\n$database-\u003efrom('table')-\u003ewhereIsNotNull('field1');\n// Produce SELECT * FROM table WHERE field1 IS NOT NULL;\n\n$database-\u003efrom('table')-\u003ewhereIsNull('field1');\n// Produce SELECT * FROM table WHERE field1 IS NULL;\n\n// Recursive mode you can call any times\n$database-\u003efrom('table')-\u003ewhere('field1', 10)-\u003eorWhere('field2 \u003c ?', 1);\n// Produce SELECT * FROM table WHERE field1 = 10 OR field2 \u003c 1;\n\n// Support grouped where\n$database-\u003efrom('table')-\u003ewhere('field1', 10)-\u003ewhere(function($q) {\n\t$q-\u003ewhere('field2', 20);\n\t$q-\u003eorWhere('field3 \u003c\u003e ?', 15);\n});\n// Produce SELECT * FROM table WHERE field1 = 10 AND (field2 = 20 OR field3 \u003c\u003e 15);\n\n/** \n * Methods availabes with 'or' prefix\n * orWhere\n * orWhereBetween\n * orWhereNotNull\n */\n```\n\n### *JOIN* Examples\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB;\n\n// Inner Join\n$database-\u003efrom('table1')-\u003einnerJoin('table2', 'table1.id = table2.id');\n// Use alias\n$database-\u003eselect(['a.id','b.id'])-\u003efrom(['a' =\u003e 'table1'])\n-\u003einnerJoin(['b' =\u003e 'table2'], 'a.id = b.id');\n// Produce SELECT a.id,b.id FROM table1 AS a INNER JOIN table2 AS b ON a.id = b.id;\n\n// Left Join\n$database-\u003efrom('table1')-\u003eleftJoin('table2', 'table1.id = table2.id');\n// Use alias\n$database-\u003eselect(['a.id','b.id'])-\u003efrom(['a' =\u003e 'table1'])\n-\u003eleftJoin(['b' =\u003e 'table2'], 'a.id = b.id');\n// Produce SELECT a.id,b.id FROM table1 AS a LEFT JOIN table2 AS b ON a.id = b.id;\n\n// Right Join\n$database-\u003efrom('table1')-\u003erightJoin('table2', 'table1.id = table2.id');\n// Use alias\n$database-\u003eselect(['a.id','b.id'])-\u003efrom(['a' =\u003e 'table1'])\n-\u003erightJoin(['b' =\u003e 'table2'], 'a.id = b.id');\n// Produce SELECT a.id,b.id FROM table1 AS a RIGHT JOIN table2 AS b ON a.id = b.id;\n\n// Alias methods\n$database-\u003eselect(['a.id','b.id'])-\u003efrom(['a' =\u003e 'table1'])\n-\u003ejoin(['b' =\u003e 'table2'], 'a.id = b.id');\n// Produce inner join by default\n\n$database-\u003eselect(['a.id','b.id'])-\u003efrom(['a' =\u003e 'table1'])\n-\u003ejoin(['b' =\u003e 'table2'], 'a.id = b.id', 'left' || 'right');\n// Pass the third parameter for select type join\n```\n\n### *GROUP BY \u0026 ORDER BY* Example\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB;\n\n$database-\u003efrom('table')-\u003egroupBy('field1');\n// Produce SELECT * FROM table GROUP BY field1;\n\n$database-\u003efrom('table')-\u003eorderBy('field', 'ASC');\n// Produce SELECT * FROM table ORDER BY field ASC;\n```\n\n### *LIMIT \u0026 OFFSET* Example\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB;\n\n$database-\u003efrom('table')-\u003elimit(1);\n// Produce SELECT * FROM table LIMIT 1;\n\n$database-\u003efrom('table')-\u003elimit(10)-\u003eoffset(2);\n// Produce SELECT * FROM table LIMIT 10 OFFSET 2;\n```\n\n### *INSERT* Examples\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB($config);\n\n$lastInsertId = $database-\u003einsert('tablename', [\n\t'field1' =\u003e 'foo',\n\t'field2' =\u003e 'bar',\n\t'field3' =\u003e 'baz'\n]);\n// Produce INSERT INTO tablename(field1,field2,field3) VALUES('foo','bar','baz');\n// This method return last insert id\n\n// Set table name before insert\n$database-\u003etable('tablename')-\u003einsert([\n\t'field' =\u003e 'foo',\n\t...\n]);\n// This option is not supported in batch\n\n// Support insert batch\n$database-\u003einsertBatch('tablename', [\n\t[\n\t\t'field1' =\u003e 'foo',\n\t\t'field2' =\u003e 'bar'\n\t],\n\t[\n\t\t'field1' =\u003e 'foo2',\n\t\t'field2' =\u003e 'bar2'\n\t],\n\t...\n]);\n// Produce INSERT INTO tablename(field1,field2) VALUES ('foo','bar'),('foo2','bar2');\n\n// Support update on duplicate key\n$database-\u003einsertBatch('tablename', [\n\t[\n\t\t'id' =\u003e 1,\n\t\t'field1' =\u003e 'foo',\n\t\t'field2' =\u003e 'bar'\n\t],\n\t[\n\t\t'id' =\u003e 1,\n\t\t'field1' =\u003e 'foo2',\n\t\t'field2' =\u003e 'bar2'\n\t],\n\t...\n], 'id = id+1');\n// Produce INSERT INTO tablename(id,field1,field2) VALUES (1,'foo','bar'),(1,'foo2','bar2') ON DUPLICATE KEY UPDATE id = id+1;\n\n// Get only insert query string\n$sql = $database-\u003einsertQuery('tablename', [\n\t'field1' =\u003e 100\n]);\n\necho $sql;\n\n$sql = $database-\u003einsertBatchQuery('tablename', [\n\t[\n\t\t'field' =\u003e 1\n\t],\n\t...\n]);\n\necho $sql;\n```\n\n### *UPDATE* Examples\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB($config);\n\n// Associative array with fields and new values\n$dataUpdate = ['field1' =\u003e 'foo', ...];\n\n$database-\u003eupdate('tablename', $dataUpdate);\n// Produce UPDATE tablename SET field1 = 'foo';\n\n$database-\u003eupdate('tablename', $dataUpdate, 'field2 = 1');\n// Produce UPDATE tablename SET field1 = 'foo' WHERE field2 = 1;\n\n$database-\u003ewhere('field2 IN(?)',[1,2,'foo'])-\u003eorWhere('field1', 10)-\u003eupdate('tablename', $dataUpdate);\n// Produce UPDATE tablename SET field1 = 'foo' WHERE field2 IN(1,2,'foo') OR field1 = 10;\n// You can use method where any times\n\n// Set table name before update\n$datbase-\u003etable('tablename')-\u003eupdate([\n\t'field1' =\u003e 'bar'\n]);\n// and use where condition\n$database-\u003etable('tablename')-\u003ewhere('field2', 1)-\u003eupdate([\n\t'field1' =\u003e 'bar',\n\t...\n]);\n\n\n// Get only update query string\n$sql = $database-\u003ewhere('field1', 1)-\u003eupdateQuery('tablename', $dataUpdate);\necho $sql;\n```\n\n### *DELETE* Examples\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB($config);\n\n$database-\u003edelete('tablename');\n// Produce DELETE FROM tablename;\n\n$database-\u003edelete('tablename', 'field1 = 1');\n// Produce DELETE FROM tablename WHERE field1 = 1;\n\n$database-\u003ewhere('field1', 1)-\u003edelete('tablename');\n// Use where method\n\n// Set table name before delete\n$database-\u003etable('tablename')-\u003edelete();\n// and use where condition\n$database-\u003etable('tablename')-\u003ewhere('field1', 10)-\u003edelete();\n\n// Get only delete query string\n$sql = $database-\u003ewhere('field1', 10)-\u003edeleteQuery('tablename');\necho $sql;\n```\n\n### *CALL PROCEDURE* Example\n\nThis method use for complete PDO resources\n\nMore info visit [PDO documentation](http://php.net/manual/en/pdo.prepared-statements.php#pdo.prepared-statements)\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB($config);\n\n$status = $database-\u003ecall('procedure_name', [1, 2]);\n// Execute CALL procedure_name(1,2);\n// Return true or false\n\n$result = $database-\u003ecall('sp_test', ['foo', 'bar'], true);\n// Fetch rows result\n```\n\n### *Transaction* Example\n\n```php\n// Instance\n$database = new \\Sairoko\\QB($config);\n\n$database-\u003etransaction(function($q){\n\t$q-\u003etable('tablename')-\u003einsert(['field1' =\u003e 'foo']);\n});\n```\n\n### Get PDO instance\n\n```PHP\n// Instance\n$database = new \\Sairoko\\QB($config);\n\n$pdo = $database-\u003edb();\n// db method return PDO instance\n```\n\n## Enjoy!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsairoko12%2Fquery-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsairoko12%2Fquery-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsairoko12%2Fquery-builder/lists"}