Ejecución de consultas mediante el QueryBuilder
Ejecución de las consultas (BETA)
Mediante el Query Builder, podemos crear consultas
SQL y ejecutarlas. Esta clase permite crear objetos QueryBuilder, trabajando con
PDO y sentencias preparadas.
Los siguientes ejemplos muestran cómo ejecutar las consultas SQL de los tipos
más comunes: SELECT, INSERT, UPDATE y DELETE.
Para ver ejemplos de cómo crear dichas consultas, visitad el ejemplo
preparación de
consultas mediante el Query Builder.
Índice
Ejecución de consultas SELECT
Ejecución de consultas SELECT
Forma larga, hay que:
- Preparar el statement.
- Realizar los bindings.
- Ejecutar la consulta.
- Mapear al tipo de objeto deseado.
Ejemplo (múltiples resultados)
// crea el nuevo objeto QueryBuilder
$qb = (new QueryBuilder(QueryBuilder::SELECT, 'products'))
->where('price > ?', 1000)
->limit(2, 0);
// vincula la conexión PDO
$qb->setPDO(DB::get());
// prepara la sentencia, vincula los parámetros y ejecuta la consulta
$qb->prepare()->bindParams()->execute();
// mapea los resultados a array de objetos (stdClass si no se indica otra clase)
$resultado = $qb->fetchAll();
// mostrar el resultado
dump($resultado);
Resultado de la ejecución
array(2) {
[0]=>
object(stdClass)#13 (6) {
["id"]=>
int(1)
["name"]=>
string(8) "Computer"
["description"]=>
string(35) "Nice computer, with keys and stuff."
["price"]=>
float(2000)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
[1]=>
object(stdClass)#14 (6) {
["id"]=>
int(10)
["name"]=>
string(6) "Server"
["description"]=>
string(31) "Linux machine, god bless Linus."
["price"]=>
float(1850)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
}
Ejemplo (un resultado)
// crea el nuevo objeto QueryBuilder
$qb = (new QueryBuilder(QueryBuilder::SELECT, 'products'))
->where('id = ?', 1);
// vincula la conexión PDO
$qb->setPDO(DB::get());
// prepara la sentencia, vincula los parámetros y ejecuta la consulta
$qb->prepare()->bindParams()->execute();
// mapea los resultados a objeto (stdClass si no se indica otra clase)
$resultado = $qb->fetch();
// mostrar el resultado
dump($resultado);
Resultado de la ejecución
object(stdClass)#12 (6) {
["id"]=>
int(1)
["name"]=>
string(8) "Computer"
["description"]=>
string(35) "Nice computer, with keys and stuff."
["price"]=>
float(2000)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
Ejecución de consultas SELECT (abreviado)
Podemos abreviar un poco el código si hacemos la vinculación
y ejecución en un solo paso.
También podemos pasar la conexión al construir el objeto o bien en el método prepare().
Ejemplo (múltiples resultados)
// crea el nuevo objeto QueryBuilder
$qb = (new QueryBuilder(QueryBuilder::SELECT, 'products'))
->where('price > ?', 1000)
->limit(2, 0);
// prepara la sentencia
$qb->prepare(DB::get());
// vincula los parámetros y ejecuta la consulta
$qb->executeWithBindigs();
// mapea los resultados a array de objetos (stdClass si no se indica otra clase)
$resultado = $qb->fetchAll();
// mostrar el resultado
dump($resultado);
Resultado de la ejecución
array(2) {
[0]=>
object(stdClass)#9 (6) {
["id"]=>
int(1)
["name"]=>
string(8) "Computer"
["description"]=>
string(35) "Nice computer, with keys and stuff."
["price"]=>
float(2000)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
[1]=>
object(stdClass)#13 (6) {
["id"]=>
int(10)
["name"]=>
string(6) "Server"
["description"]=>
string(31) "Linux machine, god bless Linus."
["price"]=>
float(1850)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
}
Si la consulta solamente retornara un resultado o ninguno, por ejemplo
en una búsqueda por ID, usaríamos fetch() en lugar de fetchAll().
Ejecución de consultas SELECT (forma corta)
El proceso anterior se puede abreviar mucho más si usamos el método get()
sobre el objeto QueryBuilder, puesto que: prepara, realiza los bindings y ejecuta
en un solo paso.
Este método puede recibir como parámetro la conexión PDO a usar, aunque
no es necesario si la establecimos en algún paso anterior.
El método get() retorna un objeto PDOStatement con el resultado de la ejecución.
Ejemplo (múltiples resultados)
// crea el objeto QueryBuilder
$stm = (new QueryBuilder(QueryBuilder::SELECT, 'products', DB::get()))
->where('price > ?', 1000)
->limit(2, 0)
->get();
// como $stm es instancia de PDOStatement, usaremos el método fetchAll() de PDOStatement
// de segundo parámetro se puede usar el nombre de la clase que queremos usar
$resultado = $stm->fetchAll(PDO::FETCH_CLASS);
// mostrar el resultado
dump($resultado);
Resultado de la ejecución
array(2) {
[0]=>
object(stdClass)#12 (6) {
["id"]=>
int(1)
["name"]=>
string(8) "Computer"
["description"]=>
string(35) "Nice computer, with keys and stuff."
["price"]=>
float(2000)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
[1]=>
object(stdClass)#17 (6) {
["id"]=>
int(10)
["name"]=>
string(6) "Server"
["description"]=>
string(31) "Linux machine, god bless Linus."
["price"]=>
float(1850)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
}
Si la consulta solamente retornara un resultado o ninguno, por ejemplo
en una búsqueda por ID, usaríamos
fetchObject() de PDO en lugar de
fetchAll().
Ejecución de consultas SELECT (forma mínima)
Esta es la opción más breve.
Podemos abreviar más aún si usamos el método estático select()
para crear el objeto QueryBuilder y usamos uno de estos dos métodos:
getAndFetch(): para consultas que dan uno o ningún resultado.
getAndFetchAll(): para consultas que dan múltiples resultados.
Estos métodos hacen todos los pasos y además mapean el resultado al tipo de objeto
deseado. Reciben como parámetro la clase para los objetos y la conexión (opcional).
Ejemplo (múltiples resultados)
// todo en un solo paso
$resultado = QueryBuilder::select('products', DB::get())
->where('price > ?', 1000)
->limit(2, 0)
->getAndFetchAll();
// mostrar el resultado
dump($resultado);
Resultado de la ejecución
array(2) {
[0]=>
object(stdClass)#18 (6) {
["id"]=>
int(1)
["name"]=>
string(8) "Computer"
["description"]=>
string(35) "Nice computer, with keys and stuff."
["price"]=>
float(2000)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
[1]=>
object(stdClass)#19 (6) {
["id"]=>
int(10)
["name"]=>
string(6) "Server"
["description"]=>
string(31) "Linux machine, god bless Linus."
["price"]=>
float(1850)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
}
Ejemplo (un resultado)
// todo en un solo paso
$resultado = QueryBuilder::select('products', DB::get())
->where('id = ?', 1)
->getAndFetch();
// mostrar el resultado
dump($resultado);
Resultado de la ejecución
object(stdClass)#13 (6) {
["id"]=>
int(1)
["name"]=>
string(8) "Computer"
["description"]=>
string(35) "Nice computer, with keys and stuff."
["price"]=>
float(2000)
["created_at"]=>
string(19) "2025-03-21 10:25:49"
["updated_at"]=>
NULL
}
Ejecución de consultas INSERT
La preparación de consultas INSERT es similar a la de consultas SELECT.
Se aplican las mismas reglas que en los ejemplos anteriores para la preparación,
vinculación de parámetros y ejecución, pero no procesaremos los resultados mediante
los métodos fetch().
Se recomienda usar el método store() en lugar del método get(),
que retorna el identificador autonumérico asignado en la tabla de la base de datos.
Ejemplo
// creación y ejecución de la consulta de inserción
$id = QueryBuilder::insert('products', DB::get())
->field('name', 'Varlion overgrip')
->field('price', 3)
->field('description', 'Nice overgrip')
->store();
echo "Se ha insertado con id {$id}.";
// comprobación
$resultado = QueryBuilder::select('products', DB::get())
->where('id = ?', $id)
->getAndFetch();
dump($resultado);
Resultado de la ejecución
Se ha insertado con id 83.
object(stdClass)#17 (6) {
["id"]=>
int(83)
["name"]=>
string(16) "Varlion overgrip"
["description"]=>
string(13) "Nice overgrip"
["price"]=>
float(3)
["created_at"]=>
string(19) "2026-04-27 18:25:37"
["updated_at"]=>
NULL
}
Ejecución de consultas UPDATE
La preparación de consultas UPDATE es similar a la de consultas SELECT.
Se aplican las mismas reglas que en los ejemplos anteriores para la preparación,
vinculación de parámetros y ejecución, pero no procesaremos los resultados mediante
los métodos fetch().
Se recomienda usar el método edit() en lugar del método get(),
que retorna el número de filas afectadas.
Ejemplo
// creación y ejecución de la consulta de actualización
$rows = QueryBuilder::update('products' DB::get())
->field('name', 'Padel Balls')
->field('price', 5)
->where('id = ?', $id)
->edit();
echo "Se han actualizado {$rows} registros";
// comprobación
$resultado = QueryBuilder::select('products', DB::get())
->where('id = ?', $id)
->getAndFetch();
dump($resultado);
Resultado de la ejecución
Se han actualizado 1 registros
object(stdClass)#18 (6) {
["id"]=>
int(83)
["name"]=>
string(11) "Padel Balls"
["description"]=>
string(13) "Nice overgrip"
["price"]=>
float(5)
["created_at"]=>
string(19) "2026-04-27 18:25:37"
["updated_at"]=>
string(19) "2026-04-27 18:25:37"
}
Ejecución de consultas DELETE
La preparación de consultas DELETE es similar a la de consultas SELECT.
Se aplican las mismas reglas que en los ejemplos anteriores para la preparación,
vinculación de parámetros y ejecución, pero no procesaremos los resultados mediante
los métodos fetch().
Se recomienda usar el método destroy() en lugar del método get(),
que retorna el número de filas afectadas.
Ejemplo
// creación y ejecución de la consulta de borrado
$rows = QueryBuilder::delete('products', DB::get())
->where('id = ?', $id)
->destroy();
echo "Se han eliminado {$rows} registros";
// comprobación
$resultado = QueryBuilder::select('products', DB::get())
->where('id = ?', $id)
->getAndFetch();
dump($resultado);
Resultado de la ejecución
Se han eliminado 1 registros
NULL
Más ejemplos
Consultad los siguientes enlaces: