dev-master
9999999-dev http://github.com/ova777/daoDAO like YII
MIT
The Requires
- php >=5.3
pdo mysql db
Wallogit.com
2017 © Pedro Peláez
DAO like YII
Реализация Yii DAO без лишних зависимостей, (*1)
$db = new \ova777\DAO\Connection(
'mysql:host=localhost;dbname=test', //DSN
'user', //Login
'pwd', //Password
$options //PDO - параметры подключения (опционально)
);
$cmd = $db->createCommand($sql); //Создаем новую команду
Варианты выполнения SQL-запроса:, (*2)
$result = $cmd->execute(); //Выполнение любого запроса (возвращает bool) $reader = $cmd->query(); //Выполнение запроса SELECT $rows = $cmd->queryAll(); //Возвращает все строки результата запроса $row = $cmd->queryRow(); //Возвращает первую строку результата запроса $column = $cmd->queryColumn(); //Возвращает первый столбец результата запроса $value = $cmd->queryScalar(); //Возвращает значение первого поля первой строки результата запроса
Метод $cmd->query(); возвращает экземпляр класса Reader, результат можно получить следующими способами:, (*3)
$reader = $cmd->query();
//Вариан 1
while(($row = $reader->read())!==false) { ... }
//Вариант 2
foreach($reader as $row) { ... }
//Вариант 3 - получение всех строк сразу
$rows = $reader->readAll();
$db->beginTransaction();
try {
$db->createCommand($sql1)->execute();
$db->createCommand($sql2)->execute();
//...
$db->commit();
} catch (Exception $e) {
$db->rollback();
echo 'Error: '.$e->getMessage();
}
//Создаем команду
$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();
Вместо привязки переменных к запросу, можно напрямую привязать значения, (*4)
$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();
Для использования префиксов таблиц необходимо установить свойство Connection::tablePrefix. Затем в SQL-выражениях можно использовать {{tableName}} для имен таблиц., (*5)
$db->tablePrefix = "tbl_";
$rows = $db->createCommand('SELECT * FROM {{table}}')->queryAll();
//Название таблицы {{table}} будет преобразовано в tbl_table
Конструктор запросов предоставляет объектно-ориентированный способ написания SQL-запросов (аналогично Yii).
В данной библиотеки не поддерживаются запросы на изменение структуры БД, (*6)
//Примеры
$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();
//Без привязки значений
$db->createCommand()->delete('table_name', 'id=10');
//С привязкой
$db->createCommand()->delete('table_name', 'id=:id', array(':id'=>10));
//Без условий
$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)
);
$db->createCommand()->insert('table_name', array('column1'=>'value1', 'column2'=>'value2'));
$db->createCommand()
->select('foo')
->from('tbl_bar')
->text;
//или
$db->createCommand()
->select('foo')
->from('tbl_bar')
->sql;
DAO like YII
MIT
pdo mysql db