davewid/peyote

PHP 5.3+ 的数据库查询构建器

0.7.2 2014-02-11 15:18 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:16:00 UTC


README

一个需要 PHP 5.3 的 PDO MySQL 查询构建器引擎

安装

安装 Peyote 最简单的方法是将以下行添加到您的 composer.json 文件中。

"require":{
	"davewid/peyote": "0.6.*"
},

可选地,您可以下载此存储库的源代码并将 classes 文件夹移动过来。

标准

Peyote 遵循 PSR-0PSR-1 标准。

尽管库中未包含自动加载器,因此您需要自行设置。如果您使用 Composer 安装依赖项(强烈推荐),则无需担心任何问题,因为 Composer 会处理所有这些。

示例

我将从一个如何使用此库的完整示例开始,并在过程中逐步分解。

// Create a PDO instance
$pdo = new PDO($dsn, $user, $password);

// Create a SELECT query
$query = new \Peyote\Select('user');
$query->where('user_id', '=', 1);

// Build the PDOStatement
$statement = $pdo->prepare($query->compile());

// Run the query
$statement->execute($query->getParams());

// Fetch results
$results = $statement->fetchAll();

为什么有 getParams() 调用?

保持查询免受 SQL 注入的影响超出了此库的范围,因此 Peyote 使用 ? 占位符并跟踪您输入的所有数据。

如果您输出 $query->compile(),您将看到这个。

SELECT * FROM user WHERE user_id = ?

此时,getParams() 将返回一个包含您传递的值的数组(在本例中为 1)。

PDO 将在 execute() 期间处理占位符替换,从而使您免受 SQL 注入的很大风险。

选择

$query = new \Peyote\Select('user');
$query->where('user_id', '=', 1);

echo $query->compile();
// output: SELECT * FROM user WHERE user_id = ?

插入

$data = array(
	'email' => "testing@foo.com",
	'password' => "youllneverguess"
);

$query = new \Peyote\Insert('user');
$query->columns(array_keys($data))->values(array_values($data));

echo $query->compile();
// output: INSERT INTO user (email, password) VALUES (?, ?)

更新

$data = array(
	'password' => "iguesssomebodyguessed"
);

$query = new \Peyote\Update('user');
$query->set($data)->where('user_id', '=', 1);

echo $query->compile();
// output: UPDATE user SET password = ? WHERE user_id = ?

删除

$query = new \Peyote\Delete('user');
$query->where('user_id', '=', 1);

echo $query->compile();
// output: DELETE FROM user WHERE user_id = ?

表语句

从版本 0.6.0 开始,Peyote 随附了用于创建、修改和删除表的语句。

创建

$query = new \Peyote\Create('user');
$query->setColumns(array(
  // Add Columns here....
));

echo $query->compile();
// output: CREATE TABLE user ( {columns here...} ) ENGINE=MyISAM DEFAULT CHARSET=utf8

有两种方式可以创建列。第一种是将原始 SQL 作为字符串输入。第二种是使用 \Peyote\Column

请参阅测试文件夹以获取更多使用示例。

注意:使用 serial 作为列类型将把列设置为 INT,主键,非空,无符号和自动递增。

修改

$query = new \Peyote\Alter('user');

// As string...
$query->addColumn('activated TINYINT NOT NULL');

// As Column...
$column = new \Peyote\Column('activated', 'TINYINT', array('is_null' => false));
$query->addColumn($column);

echo $query->compile();
// Output: 'ALTER TABLE user ADD activated TINYINT NOT NULL';

删除

$query = new \Peyote\Drop('user');
echo $query->compile();
// Output: DROP TABLE user

Dave Widmer 开发