Содержание
SQL
Класс SQL предоставляет собой облегчённую обвёртку интерфейса для доступа к базам данных SQL в PHP (работает с помощью PDO).
Пространство имен: \DB
Расположение файла: lib/db/sql.php
Конструктор
$db = new \DB\SQL ( string $dsn [, string $user = NULL [, string $pw = NULL [, array $options = NULL ]]] );
Например, для подключения к базе данных MySQL синтаксис выглядит так:
$db=new \DB\SQL('mysql:host=localhost;port=3306;dbname=mysqldb','username','password');\
Подключение к базе данных SQLite будет выглядеть так:
$db=new \DB\SQL('sqlite:/path/to/db.sqlite');
Четвертый параметр - это набор параметров, которые вы можете использовать для установки дополнительных атрибутов PDO:
$options = array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, // generic attribute \PDO::ATTR_PERSISTENT => TRUE, // we want to use persistent connections \PDO::MYSQL_ATTR_COMPRESS => TRUE, // MySQL-specific attribute ); $db = new \DB\SQL('mysql:host=localhost;port=3306;dbname=mysqldb','username','password', $options);
Вот список ссылок на сведения о DSN-соединении для всех поддерживаемых в настоящее время движков на уровне SQL:
- mysql : MySQL 5.x
- sqlite : SQLite 3 и SQLite 2
- pgsql : PostgreSQL
- sqlsrv : Microsoft SQL Server / SQL Azure
- mssql, dblib, sybase : FreeTDS / Microsoft SQL Server / Sybase
- odbc : ODBC v3
- oci : Oracle
Методы
driver
Вернуть имя драйвера SQL
echo $db->driver(); // mysql
version
Вернуть версию сервера
echo $db->version(); // 5.1.51
name
Вернуть имя базы данных
echo $db->name(); // mysqldb
schema
Получить схему таблицы SQL
array|FALSE schema ( string $table [, array|string $fields = NULL [, int $ttl = 0 ]] )
Эта функция позволяет получить схему данной таблицы SQL.
$fields представляет собой либо массив, либо список имен столбцов для включения в возвращаемую схему. По умолчанию для всех полей.
Если указан $ttl - запускает проверку кэша на предмет предыдущих результатов запроса схемы и, если он не найден или срок его действия не истек, сохраняет фактический результат в бэкэнд кэша при условии, что система CACHE активирована.
Пример использования:
$db->exec("CREATE TABLE IF NOT EXISTS mytable (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name varchar(128) NULL DEFAULT 'anonymous', age SMALLINT UNSIGNED NOT NULL, birth DATE NULL )" ); $columns = $db->schema('mytable', 'name;age'); // only interested in these 2 columns var_dump($columns); // outputs array (size=2) { 'name' => array (size=5) { 'type' => string 'varchar(128)' (length=12) 'pdo_type' => int 2 // \PDO::PARAM_STR 'default' => string 'anonymous' (length=9) 'nullable' => boolean true 'pkey' => boolean false } 'age' => array (size=5) { 'type' => string 'SMALLINT UNSIGNED' (length=17) 'pdo_type' => int 1 // \PDO::PARAM_INT 'default' => null 'nullable' => boolean false 'pkey' => boolean false } }
Совет: вы можете улучшить производительность InnoDB в MySQL с помощью `SET GLOBAL innodb_stats_on_metadata = 0;` ! Для этого требуется привилегия администратора!
exec
Выполнить команду SQL
array|int|FALSE exec ( string|array $commands [, string|array $args = NULL [, int $ttl = 0 [, bool $log=TRUE ]]] )
Этот метод позволяет выполнять один или несколько заданных операторов $commands SQL и возвращает либо результирующие строки (для операторов SELECT, CALL, EXPLAIN, PRAGMA и SHOW), либо количество затронутых строк (для операторов INSERT, DELETE и UPDATE) или FALSE в случае ошибки.
Можно использовать $args для применения определенных аргументы к командам SQL.
Аргумент $ttl , если он указан, будет инициировать проверку кэша для предыдущей команды , и если не найден или истек, будет сохранить фактический результат внутреннего интерфейса кэша, при условии CACHE система активируется.
$log - это переменная для включения и отключения логов. Вы можете использовать этот параметр для профилирования, так как время обработки в миллисекундах также регистрируется в журнале каждой команды SQL.
Например, рассмотрим следующую таблицу mytable:
id | name |
---|---|
1 | Joe |
2 | William |
3 | Jack |
4 | Averell |
$rows=$db->exec('SELECT id,name FROM mytable ORDER BY id DESC'); echo count($rows); // outputs 4 foreach($rows as $row) echo $row['name']; // outputs 'Averell,Jack,William,Joe,'
в то время как оператор UPDATE вернет количество обновленных строк:
echo $db->exec('UPDATE mytable SET id=id+10'); // outputs 4
Параметризованные запросы
В exec()второй аргумент нужен , чтобы передать аргументы безопасно (см параметризованные запросы ).
Например, вместо:
$db->exec('INSERT INTO mytable VALUES(5,\'Jim\')')
настоятельно рекомендуется написать:
$db->exec('INSERT INTO mytable VALUES(:id,:name)',array(':id'=>5,':name'=>'Jim'))
Вот эквивалентный синтаксис с безымянными заполнителями:
$db->exec('INSERT INTO mytable VALUES(?,?)',array(5,'Jim'))
Краткий синтаксис для одиночных заполнителей выглядит следующим образом:
$db->exec('INSERT INTO mytable(name) VALUES(?)','Jim');
Кэширование запросов
Третий аргумент $ttl используется для включения кэширования запросов. Установите желаемое время жизни в секундах и убедитесь, что у вас активирован CACHE . Таким образом, вы можете ускорить работу своего приложения при обработке данных, которые не очень часто меняются.
Четвертый аргумент $log - это переменная для включения и отключения логов. Вы можете использовать этот параметр для профилирования, так как время обработки в миллисекундах также регистрируется в журнале каждой команды SQL.
Трансакция
Одновременно может выполняться несколько операторов SQL, если предоставляется массив операторов. F3 выполнит их как транзакцию, поэтому в случае сбоя одного оператора выполняется откат всего стека запросов.
Имейте в виду, что возвращаемое значение относится только к последней выполненной инструкции.
$result=$db->exec(array( 'INSERT INTO mytable VALUES(:id,:name)', 'DELETE FROM mytable' ), array( array(':id'=>6,':name'=>'Bill'), NULL ) ); echo $result; // outputs 6 (deleted rows)
Если вам нужно возвращаемое значение для каждого оператора, вы должны явно определить транзакцию и использовать exec()для каждого оператора (см. Ниже).
begin, rollback & commit
Запуск, прерывание или завершение транзакции SQL
// state 1: empty table $db->begin(); $db->exec('INSERT INTO mytable(name) VALUES(?)','Alfred'); $db->exec('INSERT INTO mytable(name) VALUES(?)','Bonnie'); // state 2: table contains 2 rows $db->rollback(); // state 3: back to state 1 $db->exec('INSERT INTO mytable(name) VALUES(?)','Clyde'); // state 4: table contains 1 row $db->commit(); // state 5: changes commited // end of transaction: only Clyde has been inserted to database
trans
Вернет TRUE, если в данный момент активна транзакция SQL
if (!$db->trans()) $db->begin();
count
Вернуть количество строк, затронутых последним запросом
$db->exec('INSERT INTO mytable(name) VALUES(?)','Alfred'); echo $db->count(); // outputs 1 $db->exec('INSERT INTO mytable(name) VALUES(?)','Bonnie'); echo $db->count(); // outputs 1 $db->exec('SELECT * FROM mytable'); echo $db->count(); // outputs 2
log
Вернуть результаты профилировщика SQL
$db->exec('INSERT INTO mytable(name) VALUES(?)','Clyde'); $db->exec('INSERT INTO mytable(name) VALUES(?)','Don'); $db->exec('INSERT INTO mytable(name) VALUES(?)','Elliott'); echo $db->log(); // outputs: Mon, 27 Dec 2013 12:26:05 +0100 (2.0ms) INSERT INTO mytable(name) VALUES('Clyde') Mon, 27 Dec 2013 12:26:05 +0100 (3.6ms) INSERT INTO mytable(name) VALUES('Don') Mon, 27 Dec 2013 12:26:05 +0100 (1.3ms) INSERT INTO mytable(name) VALUES('Elliott')
uuid
Вернуть уникальный хэш идентификатора подключения
string uuid ( )
Эта функция возвращает хэш от $dsn DSN , передаваемого в _constructоr
type
Сопоставьте тип данных аргумента с его обратной константой PDO
int type ( scalar $val )
Эта функция позволяет получить константу PDO, соответствующую типу php, $valкак показано ниже:
- тип PHP NULL вернет \PDO::PARAM_NULL
- тип PHP boolean вернет \PDO::PARAM_BOOL(int 5)
- тип PHP integer типа PHP врнет \PDO::PARAM_INT(int 1)
- и любой другой тип php вернет \PDO::PARAM_STR(int 2)
quote
Строка цитаты
string quote ( string $val [, int $type = \PDO::PARAM_STR ] )
quotekey
Вернуть имя идентификатора в кавычках
string quotekey ( string $key )
Эта функция экранирует кавычками имя ключа таблицы или столбца в соответствии с требованиями и синтаксисом текущей базы данных. Например , превратит page в «page» для SQLite и Oracle, а для db MySQL превратит в `page`.
pdo
Возврат объекта PDO
\PDO pdo ( )