ova777/

类似于 YII 的 DAO

v1.0.1 2016-12-21 15:43 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:20:12 UTC


README

实现 Yii DAO 无额外依赖

1. 连接数据库

$db = new \ova777\DAO\Connection(
    'mysql:host=localhost;dbname=test', //DSN 
    'user', //Login
    'pwd', //Password
    $options //PDO - параметры подключения (опционально)
);

2. 执行 SQL 查询

$cmd = $db->createCommand($sql); //Создаем новую команду

执行 SQL 查询的选项

$result = $cmd->execute(); //Выполнение любого запроса (возвращает bool)
$reader = $cmd->query(); //Выполнение запроса SELECT 
$rows = $cmd->queryAll(); //Возвращает все строки результата запроса
$row = $cmd->queryRow(); //Возвращает первую строку результата запроса
$column = $cmd->queryColumn(); //Возвращает первый столбец результата запроса
$value = $cmd->queryScalar(); //Возвращает значение первого поля первой строки результата запроса

3. 处理查询结果

方法 $cmd->query() 返回 Reader 类的实例,可以通过以下方式获取结果:

$reader = $cmd->query();
//Вариан 1
while(($row = $reader->read())!==false) { ... }
//Вариант 2
foreach($reader as $row) { ... }
//Вариант 3 - получение всех строк сразу
$rows = $reader->readAll();

4. 使用事务

$db->beginTransaction();
try {
	$db->createCommand($sql1)->execute();
	$db->createCommand($sql2)->execute();
	//...
	$db->commit();
} catch (Exception $e) {
	$db->rollback();
	echo 'Error: '.$e->getMessage();
}

5. 绑定参数

//Создаем команду
$cmd = $db->createCommand('INSERT INTO table SET col=:col');
//Провязываем переменную $value к параметру :col
$cmd->bindParam(':col', $value, PDO::PARAM_STR);
//Вставляем строку
$value = 'foo';
$cmd->execute();
//Вставляем следующую строку с новыми значениями
$value = 'bar';
$cmd->execute();

6. 绑定值

除了将变量绑定到查询中,还可以直接绑定值

$cmd = $db->createCommand('SELECT * FROM table WHERE a=:a AND b=:b AND c=:c');
//Привязка одного значения
$cmd->bindValue(':a', 'A_VALUE', PDO::PARAM_STR);
//Привязка нескольких значений
$cmd->bindValues(array(':b'=>'B_VALUE', ':c'=>'C_VALUE'));
//Получаем результат
$rows = $cmd->queryAll();

7. 使用表前缀

要使用表前缀,需要设置 Connection::tablePrefix 属性。然后可以在 SQL 表达式中使用 {{tableName}} 来指定表名。

$db->tablePrefix = "tbl_";
$rows = $db->createCommand('SELECT * FROM {{table}}')->queryAll();
//Название таблицы {{table}} будет преобразовано в tbl_table

8. 查询构造器

查询构造器提供了一种面向对象的编写 SQL 查询的方法(类似于 Yii)。
本库不支持数据库结构变更查询

8.1 获取数据

//Примеры
$rows = $db->createCommand()
    ->select('id, col1, col2 as cl2')
    ->from('{{table1}} t1')
    ->leftJoin('{{table2}} t2', 't1.id=t2.t1_id')
    ->where('id=:id', array(':id'=>id))
    ->order('id ASC')
    ->limit(5)
    ->offset(10)
    ->queryAll();
    
//union
$rows = $db->createCommand()
    ->select()
    ->from('{{one}}')
    ->union()
    ->select()
    ->from('{{two}}')
    ->queryAll();
    
//group, having
$rows = $db->createCommand()
	->select('*,COUNT(*) as cnt')
	->from('{{one}}')
	->group('col1')
	->having('cnt=2')
	->queryAll();

8.2 删除数据

//Без привязки значений
$db->createCommand()->delete('table_name', 'id=10');
//С привязкой
$db->createCommand()->delete('table_name', 'id=:id', array(':id'=>10));

8.3 更新数据

//Без условий
$db->createCommand()->update(
    'table_name', 
    array('column1'=>'value1', 'column2'=>'valu2')
);
//С условиями
$db->createCommand()->update(
    'table_name', 
    array('column1'=>'value1', 'column2'=>'valu2'),
    'id=:id',
    array(':id' => 1)
);

8.4 添加数据

$db->createCommand()->insert('table_name', array('column1'=>'value1', 'column2'=>'value2'));

9. 获取 SQL

$db->createCommand()
    ->select('foo')
    ->from('tbl_bar')
    ->text;
//или
$db->createCommand()
    ->select('foo')
    ->from('tbl_bar')
    ->sql;