Делаем лучший PHP-класс для работы с базами данных
На основе принципа минимального интерфейса
Разработчику достаточно использовать две удобные функции класса Sql для управления всеми функциями:
Sql::ds # Получить объект источника данных.
Sql::assistant # Получить вспомогательный класс Sql.
Руководство по использованию
class JptestApp
{
/**
* @var SqlDataSource
*/
static $ds = null;
static function sql_monitor($sql, $dsn_id)
{
if (PHP_SAPI === 'cli')
{
fwrite(STDOUT, "[sql]: " . print_r($sql,true) . PHP_EOL);
}
else
{
echo "<BR />[sql]: " . print_r($sql,true);
}
}
}
function jptest_init()
{
$dsn = array(
'type' => 'mysql',
'dbpath' => 'mysql:host=127.0.0.1;port=3306;dbname=jptest',
'login' => 'root',
'password' => '123456',
'initcmd' => array(
"SET NAMES 'utf8'",
),
'attr' => array(
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_PERSISTENT => false,
),
'monitor' => 'JptestApp::sql_monitor',
);
JptestApp::$ds = Sql::ds($dsn);
var_dump(JptestApp::$ds);
$result = null;
// $result = JptestApp::$ds->all('show tables');
//
// $result = Sql::assistant( JptestApp::$ds )->select_row('ixr_citys',array('island'=>array(1,'>=')),'id,name,image');
//
// $result = Sql::assistant( JptestApp::$ds )->select('ixr_citys',array('id'=>array(1,'>=')),'id,name,image');
prety_printr( $result );
}
Мощные условия поиска
function assertEqual($var1,$var2){
if ($var1 !== $var2)
throw new Exception('Not Equal .');
}
$ds = JptestApp::$ds;
/* @var $ds SqlDataSource */
$cond = "author_id=123 AND bookname='色色'";
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id=123 AND bookname='色色'");
// ? 为数组
$cond = array(
'author_id' => 123,
'bookname' => '色色',
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id = 123 AND bookname = '色色'");
// > < !=
$cond = array(
'author_id' => array(123, '>'),
'bookname' => '色色',
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id > 123 AND bookname = '色色'");
$cond = array(
'author_id' => array(123, '<'),
'bookname' => '色色',
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id < 123 AND bookname = '色色'");
$cond = array(
'author_id' => array(123, '!='),
'bookname' => '色色',
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id != 123 AND bookname = '色色'");
// 模糊查询
$cond = array(
'bookname' => array('%色色%','LIKE'),
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"bookname LIKE '%色色%'");
// 'IN','NOT IN'
$cond = array(
'author_id' => array( array(123,124,125) ),
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id IN (123,124,125)");
$cond = array(
'author_id' => array( array(123,124,125), 'IN'),
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id IN (123,124,125)");
$cond = array(
'author_id' => array( array(123,124,125), 'NOT IN'),
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id NOT IN (123,124,125)");
// BETWEEN AND , NOT BETWEEN AND
$cond = array(
'author_id' => array( array(10,25), 'BETWEEN_AND'),
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id BETWEEN 10 AND 25");
$cond = array(
'author_id' => array( array(10,25), 'NOT_BETWEEN_AND'),
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result,"author_id NOT BETWEEN 10 AND 25");
// author_id > 15 OR author_id < 5 AND author_id != 32
$cond = array(
'author_id' => array(
array( array(15,'>','OR'),array(5,'<','AND'), array(32,'!=') ) ,
'FIELD_GROUP'
),
);
$result = SqlHelper::parse_cond($ds,$cond,FALSE);
assertEqual($result," (author_id > 15 OR ## Простота конфигурации и поддержка нескольких баз данных
```php
**Конфигурация информации**
1. type = mysql/mariadb
{
dbpath: mysql:host=${host};port=${port};dbname=${database}
initcmd: [
SET NAMES '${charset}',
]
}
2. type = pgsql
{
dbpath: pgsql:host=${host};port=${port};dbname=${database}
initcmd: [
SET NAMESS '${charset}',
]
}
3. type = sybase
{
dbpath: sybase:host=${host};port=${port};dbname=${database}
initcmd: [
SET NAMES '${charset}',
]
}
4. type = sqlite
{
dbpath: sqlite:${file}
initcmd: [
]
}
5. type = mssql
{
Windows:
dbpath: sqlsrv:server=${host};port=${port};database=${database}
Linux:
dbpath: dblib:host=${host};port=${port};dbname=${database}
initcmd: [
SET QUOTED_IDENTIFIER ON,
SET NAMES '${charset}',
]
}
Если вы хотите использовать постоянное соединение, вы можете настроить параметр attr
attr: [
PDO::ATTR_PERSISTENT => TRUE,
]
Класс PDO::ATTR_DEFAULT_FETCH_MODE по умолчанию используется для PDO::FETCH_ASSOC и не может быть изменен
##
**План разработки**
1. ### Декабрь 2014 года
Задача | Статус
--- | ---
Завершение первой версии класса операций с базой данных | Окончательный период редактирования
2. ### Апрель 2015 года
Задача | Статус
--- | ---
Поддержка разделения чтения и записи | Окончательный период редактирования
##
**Запрос на оценку, обратную связь и предложения**
Мой QQ и WeChat — 449211678. Если у вас есть вопросы, мы можем обсудить их в частном порядке.
##
**Ссылки**
1 [Блог разработчика](https://vb2005xu.iteye.com)
2 [Руководство по синтаксису Markdown](https://help.github.com/articles/markdown-basics/)
##
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )