{"id":20648515,"url":"https://github.com/lincanbin/php-pdo-mysql-class","last_synced_at":"2025-04-04T13:11:08.004Z","repository":{"id":23047092,"uuid":"26400180","full_name":"lincanbin/PHP-PDO-MySQL-Class","owner":"lincanbin","description":"A PHP MySQL PDO class similar to the the Python MySQLdb,  which supports iterator and parameter binding when using \"WHERE IN\" statement.","archived":false,"fork":false,"pushed_at":"2020-12-01T03:14:41.000Z","size":64,"stargazers_count":243,"open_issues_count":15,"forks_count":114,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-04-04T12:50:30.656Z","etag":null,"topics":["iterator","iterator-pattern","mysql","pdo","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lincanbin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-11-09T15:40:02.000Z","updated_at":"2025-03-23T08:43:43.000Z","dependencies_parsed_at":"2022-08-21T18:30:34.026Z","dependency_job_id":null,"html_url":"https://github.com/lincanbin/PHP-PDO-MySQL-Class","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincanbin%2FPHP-PDO-MySQL-Class","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincanbin%2FPHP-PDO-MySQL-Class/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincanbin%2FPHP-PDO-MySQL-Class/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lincanbin%2FPHP-PDO-MySQL-Class/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lincanbin","download_url":"https://codeload.github.com/lincanbin/PHP-PDO-MySQL-Class/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247182399,"owners_count":20897381,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["iterator","iterator-pattern","mysql","pdo","php"],"created_at":"2024-11-16T17:09:09.883Z","updated_at":"2025-04-04T13:11:07.981Z","avatar_url":"https://github.com/lincanbin.png","language":"PHP","readme":"PHP-PDO-MySQL-Class [![Build Status](https://travis-ci.org/lincanbin/PHP-PDO-MySQL-Class.svg?branch=develop)](https://travis-ci.org/lincanbin/PHP-PDO-MySQL-Class)\n===================\n\nA PHP MySQL PDO class similar to the Python MySQLdb, \nwhich supports iterator and parameter binding when using \"WHERE IN\" statement.\n\n* [Install](#install)\n\n* [Initialize](#initialize)\n\n* [Preventing SQL Injection Attacks](#preventing-sql-injection-attacks)\n\n* [Basic Usage](#basic-usage)\n\n* [Transaction](#transaction)\n\n* [Iterator](#iterator)\n\n\nInstall\n------------\nCopy the files under `src/` to your program\n \nOR\n\n```\ncomposer require lincanbin/php-pdo-mysql-class\n```\n\nInitialize\n------------\n```php\n\u003c?php\ndefine('DBHost', '127.0.0.1');\ndefine('DBPort', 3306);\ndefine('DBName', 'Database');\ndefine('DBUser', 'root');\ndefine('DBPassword', '');\nrequire(__DIR__ . \"/src/PDO.class.php\");\n$DB = new Db(DBHost, DBPort, DBName, DBUser, DBPassword);\n?\u003e\n```\n\nPreventing SQL Injection Attacks\n------------\n#### Safety: Use parameter binding method\nSafety Example:\n```php\n\u003c?php\n$DB-\u003equery(\"SELECT * FROM fruit WHERE name=?\", array($_GET['name']));\n?\u003e\n```\n\n\n#### Unsafety: Split joint SQL string\nUnsafety Example: \n```php\n\u003c?php\n$DB-\u003equery(\"SELECT * FROM fruit WHERE name=\".$_GET['name']);\n?\u003e\n```\nBasic Usage\n------------\n\n#### table \"fruit\"\n\n| id | name | color\n|:-----------:|:------------:|:------------:|\n| 1       |      apple  |     red    \n| 2       |      banana |     yellow  \n| 3       |   watermelon|     green   \n| 4       |        pear |     yellow    \n| 5       |   strawberry|     red    \n\n#### Fetching with Bindings (ANTI-SQL-INJECTION):\n\n```php\n\u003c?php\n$DB-\u003equery(\"SELECT * FROM fruit WHERE name=? and color=?\",array('apple','red'));\n$DB-\u003equery(\"SELECT * FROM fruit WHERE name=:name and color=:color\",array('name'=\u003e'apple','color'=\u003e'red'));\n?\u003e\n```\n\nResult:\n\n```php\nArray\n(\n\t[0] =\u003e Array\n\t\t(\n\t\t\t[id] =\u003e 1\n\t\t\t[name] =\u003e apple\n\t\t\t[color] =\u003e red\n\t\t)\n)\n```\n\n#### WHERE IN (needs named placeholder):\n\n```php\n\u003c?php\n$DB-\u003equery(\"SELECT * FROM fruit WHERE name IN (:fruits)\",array(array('apple','banana')));\n?\u003e\n```\n\nResult:\n\n```php\nArray\n(\n\t[0] =\u003e Array\n\t\t(\n\t\t\t[id] =\u003e 1\n\t\t\t[name] =\u003e apple\n\t\t\t[color] =\u003e red\n\t\t)\n\t[1] =\u003e Array\n\t\t(\n\t\t\t[id] =\u003e 2\n\t\t\t[name] =\u003e banana\n\t\t\t[color] =\u003e yellow\n\t\t)\n)\n```\n\n```php\n\u003c?php\n$query = \"SELECT * FROM fruit WHERE name IN (:fruits) AND color = :color\";\n// use multidimensional array as $params\n$params = array(\n\t\"color\" =\u003e \"red\",\n\t\"fruits\" =\u003e array(\n\t\t\"apple\",\n\t\t\"banana\"\n\t)\n);\n$DB-\u003equery($query, $params);\n?\u003e\n```\n\nResult:\n\n```php\nArray\n(\n\t[0] =\u003e Array\n\t\t(\n\t\t\t[id] =\u003e 1\n\t\t\t[name] =\u003e apple\n\t\t\t[color] =\u003e red\n\t\t)\n)\n```\n\n#### Fetching Column:\n\n```php\n\u003c?php\n$DB-\u003ecolumn(\"SELECT color FROM fruit WHERE name IN (:color)\",array('apple','banana','watermelon'));\n?\u003e\n```\n\nResult:\n\n```php\nArray\n(\n\t[0] =\u003e red\n\t[1] =\u003e yellow\n\t[2] =\u003e green\n)\n```\n\n#### Fetching Row:\n\n```php\n\u003c?php\n$DB-\u003erow(\"SELECT * FROM fruit WHERE name=? and color=?\",array('apple','red'));\n?\u003e\n```\n\nResult:\n\n```php\nArray\n(\n\t[id] =\u003e 1\n\t[name] =\u003e apple\n\t[color] =\u003e red\n)\n```\n\n#### Fetching single:\n\n```php\n\u003c?php\n$DB-\u003esingle(\"SELECT color FROM fruit WHERE name=? \",array('watermelon'));\n?\u003e\n```\n\nResult:\n\n```php\ngreen\n```\n\n#### Delete / Update / Insert\nThese operations will return the number of affected result set. (integer)\n```php\n\u003c?php\n// Delete\n$DB-\u003equery(\"DELETE FROM fruit WHERE id = :id\", array(\"id\"=\u003e\"1\"));\n$DB-\u003equery(\"DELETE FROM fruit WHERE id = ?\", array(\"1\"));\n// Update\n$DB-\u003equery(\"UPDATE fruit SET color = :color WHERE name = :name\", array(\"name\"=\u003e\"strawberry\",\"color\"=\u003e\"yellow\"));\n$DB-\u003equery(\"UPDATE fruit SET color = ? WHERE name = ?\", array(\"yellow\",\"strawberry\"));\n// Insert\n$DB-\u003equery(\"INSERT INTO fruit(id,name,color) VALUES(?,?,?)\", array(null,\"mango\",\"yellow\"));//Parameters must be ordered\n$DB-\u003equery(\"INSERT INTO fruit(id,name,color) VALUES(:id,:name,:color)\", array(\"color\"=\u003e\"yellow\",\"name\"=\u003e\"mango\",\"id\"=\u003enull));//Parameters order free\n?\u003e\n```\n\n#### Get Last Insert ID\n\n```php\n\u003c?php\n$DB-\u003elastInsertId();\n?\u003e\n```\n\n#### Get the number of queries since the object initialization\n\n```php\n\u003c?php\n$DB-\u003equerycount;\n?\u003e\n```\n\n#### Close Connection\n\n```php\n\u003c?php\n$DB-\u003ecloseConnection();\n?\u003e\n```\n\nTransaction\n------------\n```php\n\u003c?php\ntry {\n    $DB-\u003ebeginTransaction();\n    var_dump($DB-\u003einTransaction()); // print \"true\"\n    $DB-\u003ecommit();\n} catch(Exception $ex) {\n    // handle Error\n    $DB-\u003erollBack();\n}\n?\u003e\n```\n\nIterator\n------------\n\n**Use iterator** when you want to read thousands of data from the database for statistical or full update of Elastic Search or Solr indexes.\n\n[Iterator](https://secure.php.net/manual/en/class.iterator.php) is a traversable object that does not read all the data queried from MySQL into memory.\n\nSo you can safely use `foreach` to handle millions of MySQL result sets without worrying about excessive memory usage.\n\nExample:\n\n```php\n$iteratorInstance = $DB-\u003eiterator(\"SELECT * FROM fruit limit 0, 1000000;\");\n$colorCountMap = array(\n    'red' =\u003e 0,\n    'yellow' =\u003e 0,\n    'green' =\u003e 0\n);\nforeach($iteratorInstance as $key =\u003e $value) {\n    sendDataToElasticSearch($key, $value);\n    $colorCountMap[$value['color']]++;\n}\nvar_export($colorCountMap);\n```\nReturn:\n\n```php\narray(3) {\n  [red] =\u003e 2\n  [yellow] =\u003e 2\n  [green] =\u003e 1\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flincanbin%2Fphp-pdo-mysql-class","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flincanbin%2Fphp-pdo-mysql-class","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flincanbin%2Fphp-pdo-mysql-class/lists"}