DaoOne . Это простая оболочка для Mysqli.
Эта библиотека работает максимально быстро. Большинство операций представляют собой простое управление строками/массивами.
Примечание. Этот выпуск перенесен на https://github.com/EFTEC/PdoOne.
PdoOne выполняет ту же работу, но работает с библиотекой PDO (вместо MySQLi). Сейчас PdoOne работает с Mysqli и SqlSrv, но у него есть много других функций, которых нет в DaoOne
Установить через композитор
композитору требуется eftec/pdoone
Эта библиотека может работать в тандеме с eftec/ DaoOne .
Измените класс вместо использования eftec/ DaoOne -> eftec/pdoone.
Пример:
До:
/** @var eftec DaoOne $db */
$ db = null ;
После:
/** @var eftecPdoOne $db */
$ db = null ;
До:
$ db = new DaoOne ( ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' );
После:
$ db = new DaoOne ( ' mysql ' , ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' ); // check 'mysql'
Если мы используем DaoOne ::runGen(false), то мы должны проверить результат. runGen ( DaoOne ) возвращает объект mysqli_result. runGen (PdoOne) возвращает объект pdostatement.
До:
$ result = $ db -> runGen ( false ); // it returns a mysqli_result
$ result -> fetch_assoc ();
$ result -> free_result ();
После:
$ result = $ db -> runGen ( false ); // it returns a pdostatement
$ result -> fetch ( PDO :: FETCH_ASSOC );
$ result = null ;
Включите это
$stmt->bind_param("s", $_POST['name']);
$stmt->execute();
$result = $stmt->get_result();
if($result->num_rows === 0) exit('No rows');
while($row = $result->fetch_assoc()) {
$ids[] = $row['id'];
$names[] = $row['name'];
$ages[] = $row['age'];
}
var_export($ages);
$stmt->close();
в это
$products=$dao
->select("*")
->from("myTable")
->where("name = ?",[$_POST['name']])
->toList();
Добавьте в композитор.json следующее требование, затем обновите композитор.
{
"require" : {
"eftec/ DaoOne " : " ^3.15 "
}
}
или установите его через cli, используя
композитору требуется eftec/ DaoOne
Просто скачайте файл lib/ DaoOne .php и сохраните его в папке.
$ dao = new DaoOne ( " 127.0.0.1 " , " root " , " abc.123 " , " sakila " , "" );
$ dao -> connect ();
где
$ sql = " CREATE TABLE `product` (
`idproduct` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`idproduct`)); " ;
$ dao -> runRawQuery ( $ sql );
$ sql = " insert into `product`(name) values(?) " ;
$ stmt = $ dao -> prepare ( $ sql );
$ productName = " Cocacola " ;
$ stmt -> bind_param ( " s " , $ productName ); // s stand for string. Also i =integer, d = double and b=blob
$ dao -> runQuery ( $ stmt );
Примечание: вы также можете вставить, используя процедурную цепочку Insert($table,$schema,[$values])
$ dao -> runRawQuery ( ' insert into `product` (name) values(?) '
, array ( ' s ' , ' cocacola ' ));
Он возвращает mysqli_statement.
$ sql = " select * from `product` order by name " ;
$ stmt = $ dao -> prepare ( $ sql );
$ dao -> runQuery ( $ stmt );
$ rows = $ stmt -> get_result ();
while ( $ row = $ rows -> fetch_assoc ()) {
var_dump ( $ row );
}
Это заявление необходимо обрабатывать вручную.
Он возвращает ассоциативный массив.
$ sql = " select * from `product` order by name " ;
$ stmt = $ dao -> prepare ( $ sql );
$ dao -> runQuery ( $ stmt );
$ rows = $ stmt -> get_result ();
$ allRows = $ rows -> fetch_all ( MYSQLI_ASSOC );
var_dump ( $ allRows );
try {
$ sql = " insert into `product`(name) values(?) " ;
$ dao -> startTransaction ();
$ stmt = $ dao -> prepare ( $ sql );
$ productName = " Fanta " ;
$ stmt -> bind_param ( " s " , $ productName );
$ dao -> runQuery ( $ stmt );
$ dao -> commit (); // transaction ok
} catch ( Exception $ e ) {
$ dao -> rollback ( false ); // error, transaction cancelled.
}
Он начинает транзакцию
Он фиксирует транзакцию.
Он откатывает транзакцию.
Если true (по умолчанию), то при возникновении ошибки выдается ошибка. Если false, то выполнение продолжается
Это правда, если база данных подключена, в противном случае это ложь.
Вы также можете создать процедурный запрос.
Пример:
$ results = $ dao -> select ( " * " )-> from ( " producttype " )
-> where ( ' name=? ' , [ ' s ' , ' Cocacola ' ])
-> where ( ' idproducttype=? ' , [ ' i ' , 1 ])
-> toList ();
Генерирует команду выбора.
$ results = $ dao -> select ( " col1,col2 " )->. . .
Генерирует запрос: выберите col1, col2 ....
$ results = $ dao -> select ( " select * from table " )->. . .
Генерирует запрос: выберите * из таблицы ....
Генерирует команду выбора.
$ results = $ dao -> select ( " col1,col2 " )-> distinct (). . .
Генерирует запрос: выберите отдельные столбцы col1, col2....
Примечание. ->distinct('unique') возвращает select unique ..
Генерирует команду from.
$ results = $ dao -> select ( " * " )-> from ( ' table ' ). . .
Генерирует запрос: выберите * из таблицы
$tables может быть отдельной таблицей или конструкцией sql. Например, допустима следующая команда:
$ results = $ dao -> select ( " * " )-> from ( ' table t1 inner join t2 on t1.c1=t2.c2 ' ). . .
Генерирует команду где.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=1 ' ). . .
Генерирует запрос: выберите * из таблицы , где p1=1
Примечание. ArrayParameters — это массив следующего вида: тип, значение.
Где тип — i=целое число, d=double, s=string или b=blob. В случае сомнений используйте «s».
Пример параметров массива:
['i',1 ,'s','привет' ,'d',20.3 ,'s','мир']
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ]). . .
Генерирует запрос: выберите * из таблицы , где p1=?(1)
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? and p2=? ' ,[ ' i ' , 1 , ' s ' , ' hello ' ]). . .
Генерирует запрос: выберите * из таблицы , где p1=?(1) и p2=?('привет')
Примечание. где можно вложиться.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ])
-> where ( ' p2=? ' ,[ ' s ' , ' hello ' ]). . .
Генерирует запрос: выберите * из таблицы , где p1=?(1) и p2=?('привет')
Вы также можете использовать:
$ results = $ dao -> select ( " * " )-> from ( " table " )
-> where ([ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();
Генерирует запрос: выберите * из таблицы , где p1=?(Coca-Cola) и p2=?(1)
Генерирует команду заказа.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> order ( ' p1 desc ' ). . .
Генерирует запрос: выберите * из порядка таблицы по p1 desc
Генерирует групповую команду.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ). . .
Генерирует запрос: выберите * из группы таблиц по p1.
Генерирует групповую команду.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( ' i ' , 1 )). . .
Генерирует запрос: выберите * из группы таблиц по p1, имеющую p1>?(1)
Примечание. Иметь может быть вложенным, имея()->иметь().
Примечание: наличие параметров может быть без параметров ('col>10')
Запустите создание запроса.
Обратите внимание: если returnArray имеет значение true, он возвращает ассоциативный массив. если returnArray имеет значение false, он возвращает mysqli_result
Примечание. Он сбрасывает текущие параметры (такие как текущий выбор, откуда, откуда и т. д.).
Это макрос runGen. Он возвращает ассоциативный массив или ноль.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toList ()
Это макрос runGen. Он возвращает mysqli_result или null.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toResult ()
Это макрос runGen. Он возвращает первую строку (если есть, в противном случае возвращает false) в виде ассоциативного массива.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> first ()
Это макрос runGen. Он возвращает последнюю строку (если есть, в противном случае возвращает false) в виде ассоциативного массива.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> last ()
Иногда более эффективно запускать order() и first(), потому что последний() считывает все значения.
Он возвращает команду sql.
$ sql = $ dao -> select ( " * " )
-> from ( ' table ' )
-> sqlGen ();
echo $ sql ; // returns select * from table
$ results = $ dao -> toList (); // executes the query
Примечание. Это не сбрасывает запрос.
Существует четыре способа выполнения каждой команды.
Допустим, мы хотим добавить целое число в столбец col1 со значением 20.
Схема и значения с использованием списка значений : где первое значение — это столбец, второе — тип значения (i = целое число, d = double, s = строка, b = blob), а второй массив содержит значения.
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' ]
,[ 20 ]);
Схема и значения в одном списке : первое значение — это столбец, второе — тип значения (i=целое,d=double,s=string,b=blob), а третье — значение.
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' , 20 ]);
Схема и значения с использованием двух ассоциативных массивов :
$ dao -> insert ( " table "
,[ ' col1 ' => ' i ' ]
,[ ' col1 ' => 20 ]);
Схема и значения с использованием одного ассоциативного массива . Тип вычисляется автоматически.
$ dao -> insert ( " table "
,[ ' col1 ' => 20 ]);
Создает команду вставки.
$ dao -> insert ( " producttype "
,[ ' idproducttype ' , ' i ' , ' name ' , ' s ' , ' type ' , ' i ' ]
,[ 1 , ' cocacola ' , 1 ]);
Использование вложенной цепочки (один массив)
$ dao -> from ( " producttype " )
-> set ([ ' idproducttype ' , ' i ' , 0 , ' name ' , ' s ' , ' Pepsi ' , ' type ' , ' i ' , 1 ])
-> insert ();
Использование множественного набора вложенных цепочек
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' ,[ ' s ' , ' Pepsi ' ])
-> set ( ' type=? ' ,[ ' i ' , 1 ])
-> insert ();
или (тип определяется, по возможности, автоматически MySql)
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' , ' Pepsi ' )
-> set ( ' type=? ' , 1 )
-> insert ();
Использование декларативного набора вложенных цепочек
$ dao -> from ( " producttype " )
-> set ( ' (idproducttype,name,type) values (?,?,?) ' ,[ ' i ' , 100 , ' s ' , ' Pepsi ' , ' i ' , 1 ])
-> insert ();
Генерирует запрос: вставить в ProductType(idproducttype,name,type) значения(?,?,?) ....
Создает команду вставки.
$ dao -> update ( " producttype "
,[ ' name ' , ' s ' , ' type ' , ' i ' ] //set
,[ 6 , ' Captain-Crunch ' , 2 ] //set
,[ ' idproducttype ' , ' i ' ] // where
,[ 6 ]); // where
$ dao -> update ( " producttype "
,[ ' name ' => ' Captain-Crunch ' , ' type ' => 2 ] // set
,[ ' idproducttype ' => 6 ]); // where
$ dao -> from ( " producttype " )
-> set ( " name=? " ,[ ' s ' , ' Captain-Crunch ' ]) //set
-> set ( " type=? " ,[ ' i ' , 6 ]) //set
-> where ( ' idproducttype=? ' ,[ ' i ' , 6 ]) // where
-> update (); // update
или
$ dao -> from ( " producttype " )
-> set ( " name=? " , ' Captain-Crunch ' ) //set
-> set ( " type=? " , 6 ) //set
-> where ( ' idproducttype=? ' ,[ ' i ' , 6 ]) // where
-> update (); // update
Генерирует запрос: обновить набор типов продуктов,
name
=?,type
=? гдеidproducttype
=? ....
Создает команду удаления.
$ dao -> delete ( " producttype "
,[ ' idproducttype ' , ' i ' ] // where
,[ 7 ]); // where
$ dao -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // where
Генерирует запрос: удалить из типа продукта, где
idproducttype
=? ....
Вы также можете удалить через цепочку компоновщиков DQL.
$ dao -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ ' i ' , 7 ]) // where
-> delete ();
$ dao -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete ();
Генерирует запрос: удалить из типа продукта, где
idproducttype
=? ....
Последовательность является альтернативой полю AUTO_NUMERIC. Он использует таблицу для создания уникального идентификатора.
Используемая последовательность основана на Twitter's Snowflake и генерируется на основе времени (в микросекундах), идентификатора узла и последовательности. Это генерирует значение LONG (int 64), которое является уникальным.
$dao->nodeId=1; // optional
$dao->tableSequence='snowflake'; // optional
$dao->createSequence(); // it creates a table called snowflake and a function called next_snowflake()
$dao->getSequence() // string(19) "3639032938181434317"
$dao->getSequence(true) // returns a sequence by flipping some values.
$dao->getSequencePHP([unpredictable=false]) Возвращает последовательность без использования таблицы. Эта последовательность более эффективна, чем $dao->getSequence, но она использует случайное значение для устранения коллизий.
Если upredictable истинно, то он возвращает непредсказуемое число (переворачивает некоторые цифры)
$dao->getSequencePHP() // string(19) "3639032938181434317"
$dao->getSequencePHP(true) // string(19) "1739032938181434311"