DaoOne . Es un contenedor simple para Mysqli.
Esta biblioteca es lo más rápida posible. La mayoría de las operaciones son simples administraciones de cadenas/matriz.
Nota: esta versión se trasladó a https://github.com/EFTEC/PdoOne
PdoOne hace el mismo trabajo pero funciona con la biblioteca PDO (en lugar de MySQLi). Actualmente PdoOne funciona con Mysqli y SqlSrv pero tiene muchas otras características que no estarán presentes en DaoOne
Instalar a través del compositor
el compositor requiere eftec/pdoone
Esta biblioteca podría funcionar en conjunto con eftec/ DaoOne .
Cambie la clase, en lugar de usar eftec/ DaoOne -> eftec/pdoone
Ejemplo:
Antes:
/** @var eftec DaoOne $db */
$ db = null ;
Después:
/** @var eftecPdoOne $db */
$ db = null ;
Antes:
$ db = new DaoOne ( ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' );
Después:
$ db = new DaoOne ( ' mysql ' , ' 127.0.0.1 ' , ' root ' , ' abc.123 ' , ' sakila ' ); // check 'mysql'
Si usamos DaoOne ::runGen(false), entonces debemos verificar el resultado. runGen ( DaoOne ) devuelve un objeto mysqli_result. runGen (PdoOne) devuelve un objeto pdostatement.
Antes:
$ result = $ db -> runGen ( false ); // it returns a mysqli_result
$ result -> fetch_assoc ();
$ result -> free_result ();
Después:
$ result = $ db -> runGen ( false ); // it returns a pdostatement
$ result -> fetch ( PDO :: FETCH_ASSOC );
$ result = null ;
Gira esto
$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();
en esto
$products=$dao
->select("*")
->from("myTable")
->where("name = ?",[$_POST['name']])
->toList();
Agregue a Composer.json el siguiente requisito y luego actualice Composer.
{
"require" : {
"eftec/ DaoOne " : " ^3.15 "
}
}
o instálelo a través de cli usando
El compositor requiere eftec/ DaoOne
Simplemente descargue el archivo lib/ DaoOne .php y guárdelo en una carpeta.
$ dao = new DaoOne ( " 127.0.0.1 " , " root " , " abc.123 " , " sakila " , "" );
$ dao -> connect ();
dónde
$ 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 );
nota: también puede insertar usando una cadena de procedimiento insert($table,$schema,[$values])
$ dao -> runRawQuery ( ' insert into `product` (name) values(?) '
, array ( ' s ' , ' cocacola ' ));
Devuelve una declaración mysqli.
$ 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 );
}
Esta declaración debe procesarse manualmente.
Devuelve una matriz asociativa.
$ 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.
}
Comienza una transacción
Realiza una transacción.
Deshace una transacción.
Si es verdadero (predeterminado), arroja un error si ocurre un error. Si es falso, entonces la ejecución continúa.
Es cierto si la base de datos está conectada; de lo contrario, es falso.
También puede crear una consulta de procedimiento.
Ejemplo:
$ results = $ dao -> select ( " * " )-> from ( " producttype " )
-> where ( ' name=? ' , [ ' s ' , ' Cocacola ' ])
-> where ( ' idproducttype=? ' , [ ' i ' , 1 ])
-> toList ();
Genera un comando de selección.
$ results = $ dao -> select ( " col1,col2 " )->. . .
Genera la consulta: seleccione col1,col2 ....
$ results = $ dao -> select ( " select * from table " )->. . .
Genera la consulta: seleccione * de la tabla ....
Genera un comando de selección.
$ results = $ dao -> select ( " col1,col2 " )-> distinct (). . .
Genera la consulta: seleccione distinto col1,col2 ....
Nota: ->distinct('único') devuelve seleccionar único ..
Genera un comando from.
$ results = $ dao -> select ( " * " )-> from ( ' table ' ). . .
Genera la consulta: seleccione * de la tabla
$tables podría ser una tabla única o una construcción SQL. Por ejemplo, el siguiente comando es válido:
$ results = $ dao -> select ( " * " )-> from ( ' table t1 inner join t2 on t1.c1=t2.c2 ' ). . .
Genera un comando donde.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=1 ' ). . .
Genera la consulta: seleccione * de la tabla donde p1=1
Nota: ArrayParameters es una matriz de la siguiente manera: tipo, valor.
Donde el tipo es i=entero, d=doble, s=cadena o b=blob. En caso de duda utilice "s"
Ejemplo de parámetros de matriz:
['i',1,'s','hola','d',20.3,'s','mundo']
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ]). . .
Genera la consulta: seleccione * de la tabla donde p1=?(1)
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? and p2=? ' ,[ ' i ' , 1 , ' s ' , ' hello ' ]). . .
Genera la consulta: seleccione * de la tabla donde p1=?(1) y p2=?('hola')
Nota. donde podría anidarse.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> where ( ' p1=? ' ,[ ' i ' , 1 ])
-> where ( ' p2=? ' ,[ ' s ' , ' hello ' ]). . .
Genera la consulta: seleccione * de la tabla donde p1=?(1) y p2=?('hola')
También puedes usar:
$ results = $ dao -> select ( " * " )-> from ( " table " )
-> where ([ ' p1 ' => ' Coca-Cola ' , ' p2 ' => 1 ])
-> toList ();
Genera la consulta: seleccione * de la tabla donde p1=?(Coca-Cola) y p2=?(1)
Genera un comando de orden.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> order ( ' p1 desc ' ). . .
Genera la consulta: seleccionar * de la tabla ordenar por p1 desc
Genera un comando de grupo.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' ). . .
Genera la consulta: seleccione * del grupo de tablas por p1
Genera un comando de grupo.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> group ( ' p1 ' )
-> having ( ' p1>? ' , array ( ' i ' , 1 )). . .
Genera la consulta: seleccione * del grupo de tablas por p1 teniendo p1>?(1)
Nota: Tener podría anidarse teniendo()->tener()
Nota: Tener podría ser sin parámetros tener('col>10')
Ejecute la consulta generar.
Tenga en cuenta que si returnArray es verdadero, devuelve una matriz asociativa. si returnArray es falso, devuelve mysqli_result
Nota: Restablece los parámetros actuales (como la selección actual, desde, dónde, etc.)
Es una macro de runGen. Devuelve una matriz asociativa o nula.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toList ()
Es una macro de runGen. Devuelve un mysqli_result o nulo.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> toResult ()
Es una macro de runGen. Devuelve la primera fila (si la hay, si no, devuelve falso) como una matriz asociativa.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> first ()
Es una macro de runGen. Devuelve la última fila (si la hay, si no, devuelve falso) como una matriz asociativa.
$ results = $ dao -> select ( " * " )
-> from ( ' table ' )
-> last ()
A veces es más eficiente ejecutar order() y first() porque last() lee todos los valores.
Devuelve el comando sql.
$ sql = $ dao -> select ( " * " )
-> from ( ' table ' )
-> sqlGen ();
echo $ sql ; // returns select * from table
$ results = $ dao -> toList (); // executes the query
Nota: no restablece la consulta.
Hay cuatro formas de ejecutar cada comando.
Digamos que queremos agregar un número entero en la columna col1 con el valor 20
Esquema y valores usando una lista de valores : donde el primer valor es la columna, el segundo es el tipo de valor (i=entero,d=doble,s=cadena,b=blob) y la segunda matriz contiene los valores.
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' ]
,[ 20 ]);
Esquema y valores en la misma lista : donde el primer valor es la columna, el segundo es el tipo de valor (i=entero,d=doble,s=cadena,b=blob) y el tercero es el valor.
$ dao -> insert ( " table "
,[ ' col1 ' , ' i ' , 20 ]);
Esquema y valores usando dos matrices asociativas :
$ dao -> insert ( " table "
,[ ' col1 ' => ' i ' ]
,[ ' col1 ' => 20 ]);
Esquema y valores utilizando una única matriz asociativa : el tipo se calcula automáticamente.
$ dao -> insert ( " table "
,[ ' col1 ' => 20 ]);
Genera un comando de inserción.
$ dao -> insert ( " producttype "
,[ ' idproducttype ' , ' i ' , ' name ' , ' s ' , ' type ' , ' i ' ]
,[ 1 , ' cocacola ' , 1 ]);
Usando cadena anidada (matriz única)
$ dao -> from ( " producttype " )
-> set ([ ' idproducttype ' , ' i ' , 0 , ' name ' , ' s ' , ' Pepsi ' , ' type ' , ' i ' , 1 ])
-> insert ();
Usando conjunto múltiple de cadena anidada
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' ,[ ' s ' , ' Pepsi ' ])
-> set ( ' type=? ' ,[ ' i ' , 1 ])
-> insert ();
o (el tipo se define, en lo posible, automáticamente por MySql)
$ dao -> from ( " producttype " )
-> set ( " idproducttype=? " ,[ ' i ' , 101 ])
-> set ( ' name=? ' , ' Pepsi ' )
-> set ( ' type=? ' , 1 )
-> insert ();
Usando un conjunto declarativo de cadena anidada
$ dao -> from ( " producttype " )
-> set ( ' (idproducttype,name,type) values (?,?,?) ' ,[ ' i ' , 100 , ' s ' , ' Pepsi ' , ' i ' , 1 ])
-> insert ();
Genera la consulta: insertar en tipoproducto(idtipoproducto,nombre,tipo) valores(?,?,?) ....
Genera un comando de inserción.
$ 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
o
$ dao -> from ( " producttype " )
-> set ( " name=? " , ' Captain-Crunch ' ) //set
-> set ( " type=? " , 6 ) //set
-> where ( ' idproducttype=? ' ,[ ' i ' , 6 ]) // where
-> update (); // update
Genera la consulta: actualizar tipo de producto establecer
name
=?,type
=? dondeidproducttype
=? ....
Genera un comando de eliminación.
$ dao -> delete ( " producttype "
,[ ' idproducttype ' , ' i ' ] // where
,[ 7 ]); // where
$ dao -> delete ( " producttype "
,[ ' idproducttype ' => 7 ]); // where
Genera la consulta: eliminar del tipo de producto donde
idproducttype
=? ....
También puede eliminarlo mediante una cadena de creación de DQL.
$ dao -> from ( " producttype " )
-> where ( ' idproducttype=? ' ,[ ' i ' , 7 ]) // where
-> delete ();
$ dao -> from ( " producttype " )
-> where ([ ' idproducttype ' => 7 ]) // where
-> delete ();
Genera la consulta: eliminar del tipo de producto donde
idproducttype
=? ....
La secuencia es una alternativa al campo AUTO_NUMERIC. Utiliza una tabla para generar una identificación única.
La secuencia utilizada está basada en Snowflake de Twitter y se genera en base a tiempo (con microsegundos), Node Id y una secuencia. Esto genera un valor LARGO (int 64) que es único
$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]) Devuelve una secuencia sin utilizar una tabla. Esta secuencia es más eficiente que $dao->getSequence pero utiliza un valor aleatorio para abordar las colisiones.
Si upredictable es verdadero, devuelve un número impredecible (invierte algunos dígitos)
$dao->getSequencePHP() // string(19) "3639032938181434317"
$dao->getSequencePHP(true) // string(19) "1739032938181434311"