1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/eemcmc-sql.class.php

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Делаем лучший PHP-класс для работы с базами данных

  • Простой и понятный исходный код.
  • Простая конфигурация, удобная в использовании.
  • Поддержка различных баз данных на основе PDO, без привязки к конкретным библиотекам.
  • Умеренная функциональность, легко интегрируется.
  • Поддерживает PHP 5.2 и выше.
  • Защищён от SQL-инъекций.

На основе принципа минимального интерфейса

Разработчику достаточно использовать две удобные функции класса 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Самый простой и элегантный класс библиотеки для операций SQL. Развернуть Свернуть
GPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/eemcmc-sql.class.php.git
git@api.gitlife.ru:oschina-mirror/eemcmc-sql.class.php.git
oschina-mirror
eemcmc-sql.class.php
eemcmc-sql.class.php
master