bootpress / database
一个带有延迟连接和查询分析的PDO包装器。
v1.0.2
2024-07-17 22:33 UTC
Requires
- php: >=5.4
Requires (Dev)
- bootpress/page: ^1.0
- friendsofphp/php-cs-fixer: ^1.0
- phpunit/phpunit: ^4.0
- squizlabs/php_codesniffer: ^2.5
This package is not auto-updated.
Last update: 2024-09-26 01:26:22 UTC
README
A PDO wrapper with lazy connections, query profiling, and convenience methods that simplify and speed up your queries.
安装
将以下内容添加到您的 composer.json
文件中。
{ "require": { "bootpress/database": "^1.0" } }
示例用法
<?php use BootPress\Database\Component as Database; $dsn = 'mysql:dbname=test;host=127.0.0.1'; $username = 'localhost'; $password = 'root'; $pdo = new PDO($dsn, $username, $password); $db = new Database($pdo);
如果您已经有了PDO连接,则可以直接将其传递给构造函数,但这有几个缺点。首先,您已经连接到数据库,无论是否使用它。这可能会消耗时间和资源,更不用说是不必要的。如果您直接传递参数给我们,那么我们只有在您使用它时才会连接到数据库。
$db = new Database($dsn, $username, $password, array(), array( "SET timezone = 'GMT'", ));
现在您有了 $db
对象,但我们还没有做任何事情。一旦您执行了一个查询,然后我们会连接到数据库,在这种情况下,我们也会为您设置时区。让我们现在就做。
// First we'll create a table $db->exec(array( 'CREATE TABLE employees (', ' id INTEGER PRIMARY KEY,', ' name TEXT NOT NULL DEFAULT "",', ' title TEXT NOT NULL DEFAULT ""', ')', )); // Insert some records if ($stmt = $db->insert('employees', array('id', 'name', 'title'))) { $db->insert($stmt, array(101, 'John Smith', 'CEO')); $db->insert($stmt, array(102, 'Raj Reddy', 'Sysadmin')); $db->insert($stmt, array(103, 'Jason Bourne', 'Developer')); $db->insert($stmt, array(104, 'Jane Smith', 'Sales Manager')); $db->insert($stmt, array(105, 'Rita Patel', 'DBA')); $db->close($stmt); // The records will be inserted all at once } // You can also try this if ($db->insert('OR IGNORE INTO employees', array( 'id' => 106, 'name' => "Little Bobby'); DROP TABLE employees;--", 'title' => 'Intern', ))) { echo $db->log('count'); // 1 - It worked! } // Make some updates if (!$db->update('employees SET id = 101', 'id', array( 106 => array( 'name' => 'Roberto Cratchit', 'title' => 'CEO', ) ))) { echo $db->log('error'); // A unique id constraint } if ($stmt = $db->update('employees', 'id', array('title'))) { $db->update($stmt, 103, array('Janitor')); $db->update($stmt, 99, array('Quality Control')); $db->close($stmt); } // And upsert more if ($stmt = $db->upsert('employees', 'id', array('name', 'title'))) { $db->upsert($stmt, 101, array('Roberto Cratchit', 'CEO')); $db->upsert($stmt, 106, array('John Smith', 'Developer')); $db->close($stmt); } $db->upsert('employees', 'id', array( 107 => array( 'name' => 'Ella Minnow Pea', 'title' => 'Executive Assistant', ), )); // Check to see who all is on board if ($result = $db->query('SELECT name, title FROM employees', '', 'assoc')) { while ($row = $db->fetch($result)) { print_r($row); /* array('name'=>'Roberto Cratchit', 'title'=>'CEO') array('name'=>'Raj Reddy', 'title'=>'Sysadmin') array('name'=>'Jason Bourne', 'title'=>'Janitor') array('name'=>'Jane Smith', 'title'=>'Sales Manager') array('name'=>'Rita Patel', 'title'=>'DBA') array('name'=>'John Smith', 'title'=>'Developer') array('name'=>'Ella Minnow Pea', 'title'=>'Executive Assistant') */ } $db->close($result); } foreach ($db->all('SELECT id, name, title FROM employees') as $row) { list($id, $name, $title) = $row; } if ($ids = $db->ids('SELECT id FROM employees WHERE title = ?', 'Intern')) { // Then Little Bobby Tables isn't as good as we thought. } // Find someone to clean things up around here if ($janitor = $db->row('SELECT id, name FROM employees WHERE title = ?', 'Janitor', 'assoc')) { // array('id'=>103, 'name'=>'Jason Bourne') } // Get a total head count echo $db->value('SELECT COUNT(*) FROM employees'); // 7 // Trim off the fat $db->exec('DELETE FROM employees WHERE id = ?', 102);
为了好玩,您可以 print_r(Database::logs())
或 print_r(Database::errors())
来查看您得到了什么。如果您需要直接访问PDO实例,它位于 $db->connection()
,您可以根据需要使用它。
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。