¿Como crear consultas sql a BD?

Asked by Xabi on 2015-01-21

Necesito traer datos desde la BD y que la condición sea que la fecha este entre dos fechas.

Con DataHandler ¿no me permite hacer esto verdad? solo me permite poner un condicion como igual que, distinto que, mayor que o menor que.

Para lograr esto una opcion seria crearme yo el sql y lanzarlo. ¿Como haria esto? y ¿Es un buen metodo?

Gracias

Question information

Language:
Spanish Edit question
Status:
Solved
For:
Europio Engine Edit question
Assignee:
No assignee Edit question
Solved by:
Eugenia Bahit
Solved:
2015-01-30
Last query:
2015-01-30
Last reply:
2015-01-25
Eugenia Bahit (eugeniabahit) said : #1

No es el mejor método pero tampoco hay otra alternativa por el momento (excepto el trabajo con arrays).
Tendrías que crear el método en un helper y llamarlo desde el controlador.
De todas formas es desprolijo donde lo pongas :/

No obstante, los BETWEEN y los LIKE son dos TODO a satisfacer en breve para DataHandler, así que en el peor de los casos, tendrías una implementación temporal ;)

Xabi (xabikip) said : #2

Tendré que hacerlo así mientras las implementes.

¿Como lo podría hacer usando las funciones mysqlilayer? o ¿lo tendría que crear yo la conexión y todo el sql?

Best Eugenia Bahit (eugeniabahit) said : #3

Si estás trabajando con una versión de Europio anterior a la 4.0, con MySQLiLayer:

1) Defines la consulta:
$sql = "SELECT foo, bar FROM foobar WHERE baz BETWEEN ? AND ?";

2) Defines el array de datos a enlazar (en el bind param). El primer elemento es una cadena de texto con un caracter por cada modificador de sustitución. El caracter puede ser s, i o d (string, intiger o decimal). Los siguientes elementos del array, son las variables a enlazar (pasadas como string):

$data = array('ss', "$fecha1", "$fecha2");

3) Solo en el caso de consultas de tipo SELECT necesitas definir un array asociativo donde el nombre de claves, sea el nombre con el que quieras recibir los campos:

$fields = array("foo"=>"", "bar"=>"");

4) Ejecutás la consulta:
$resultados = MySQLiLayer::ejecutar($sql, $data, $fields);

Desde la versión 4 en adelante (que es la que ya está oficialmente en el repo) es más simple porque emplea PDO. Así que solo defines la consulta y armas un array con las variables a enlazar SOLO si es necesario y ejecutas:

$sql = "SELECT foo, bar FROM foobar WHERE baz BETWEEN ? AND ?";
$data = array($fecha1, $fecha2)
$resultados = DBLayer::execute($sql, $data);

Xabi (xabikip) said : #4

Thanks Eugenia Bahit, that solved my question.