Error en filtercriteria

35 views
Skip to first unread message

Jose Puertas

unread,
Jun 16, 2016, 5:47:15 PM6/16/16
to ZnetDK
Hola Pascal, estoy intentando filtrar un valor pero me da el siguiente error:

[2016-06-16 23:41:12] CORE - E_WARNING - Declaration of app\model\tjugadorDAO::setFilterCriteria($id) should be compatible with DAO::setFilterCriteria() - C:\xampp\htdocs\club\applications\default\app\model\tjugadordao.php(32)

el modelo:

class tjugadorDAO extends \DAO {

    protected function initDaoProperties() {

        $this->table = "usuarios";
        $this->IdColumnName = "id_usuario";
        $this->query = "select usuarios.*, posicion.nombre_posicion , posicion_1.nombre_posicion as nombre_posicion_1, posicion_2.nombre_posicion as nombre_posicion_2 from usuarios ";
        $this->query .= "left join posiciones as posicion using (id_posicion) ";
        $this->query .= "left join posiciones as posicion_1 on usuarios.id_posicion_1 = posicion_1.id_posicion ";
        $this->query .= "left join posiciones as posicion_2 on usuarios.id_posicion_2 = posicion_2.id_posicion ";
       // $this->filterClause = "where usuarios.Tut_Use_id_usuario2 like ? or usuarios.Tut_Use_id_usuario1 like ? ";
    }

    public function setFilterCriteria($id){  // aqui le paso el parámetro con entero
        
        $this->filterClause = "where usuarios.Tut_Use_id_usuario2 like ? or usuarios.Tut_Use_id_usuario1 like ? ";    
        $this->setFilterCriteria($id);
    }

}

el controlador

 static protected function action_lister() {
      /*  $request = new \Request();*/
        $filtrouserDAO = new \app\model\filtrouserDAO();
         $filtrouserDAO->setUserIDAsFilter(\UserSession::getLoginName());
        $jugadores = array();
        $user_id=  $filtrouserDAO->getResult();  //filtro por login name
        $filtro = $user_id['user_id']; // recojo el id del usuario conectado
        $valor = (int)$filtro; //lo paso a integer
        $jugadorid = new tjugadorDAO();
        $jugadorid->setFilterCriteria($valor); //aqui llama a la función declarada en el modelo y crea un bucle infinito
        while ($row = $jugadorid->getResult()) {
            $jugadores[] = $row;
        }
        /* Réponse retournée au contrôleur principal */
        $response = new \Response();
        $response->rows = $jugadores;
        $response->success = true;
        return $response;

Saludos

Jose Puertas

unread,
Jun 17, 2016, 6:59:38 AM6/17/16
to ZnetDK
Lo he cambiado por esto y sigue dando error:

Error:
[2016-06-17 09:51:50] CORE - ZNETDK ERROR - DAO-002: unable to execute the SQL query 'select usuarios.*, posicion.nombre_posicion , posicion_1.nombre_posicion as nombre_posicion_1, posicion_2.nombre_posicion as nombre_posicion_2 from usuarios left join posiciones as posicion using (id_posicion) left join posiciones as posicion_1 on usuarios.id_posicion_1 = posicion_1.id_posicion left join posiciones as posicion_2 on usuarios.id_posicion_2 = posicion_2.id_posicion  where usuarios.Tut_Use_id_usuario2 like ? or usuarios.Tut_Use_id_usuario1 like ? ': code='HY093', message='SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
[2016-06-17 09:51:50] CORE - EXCEPTION - SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens - C:\xampp\htdocs\club\engine\core\dao.php(181)
[2016-06-17 10:39:13] CORE - ZNETDK ERROR - DAO-002: unable to execute the SQL query 'select usuarios.*, posicion.nombre_posicion , posicion_1.nombre_posicion as nombre_posicion_1, posicion_2.nombre_posicion as nombre_posicion_2 from usuarios left join posiciones as posicion using (id_posicion) left join posiciones as posicion_1 on usuarios.id_posicion_1 = posicion_1.id_posicion left join posiciones as posicion_2 on usuarios.id_posicion_2 = posicion_2.id_posicion  where usuarios.Tut_Use_id_usuario2 like ? or usuarios.Tut_Use_id_usuario1 like ? ': code='HY093', message='SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens


Modelo:


class tjugadorDAO extends \DAO {

    protected function initDaoProperties() {

        $this->table = "usuarios";
        $this->IdColumnName = "id_usuario";
        $this->query = "select usuarios.*, posicion.nombre_posicion , posicion_1.nombre_posicion as nombre_posicion_1, posicion_2.nombre_posicion as nombre_posicion_2 from usuarios ";
        $this->query .= "left join posiciones as posicion using (id_posicion) ";
        $this->query .= "left join posiciones as posicion_1 on usuarios.id_posicion_1 = posicion_1.id_posicion ";
        $this->query .= "left join posiciones as posicion_2 on usuarios.id_posicion_2 = posicion_2.id_posicion ";
        $this->filterClause = "where usuarios.Tut_Use_id_usuario2 like ? or usuarios.Tut_Use_id_usuario1 like ? ";
    }

    public function setFilterTutUser($id){
         $this->table = "usuarios";
        $this->IdColumnName = "id_usuario";
        $this->query = "select usuarios.*, posicion.nombre_posicion , posicion_1.nombre_posicion as nombre_posicion_1, posicion_2.nombre_posicion as nombre_posicion_2 from usuarios ";
        $this->query .= "left join posiciones as posicion using (id_posicion) ";
        $this->query .= "left join posiciones as posicion_1 on usuarios.id_posicion_1 = posicion_1.id_posicion ";
        $this->query .= "left join posiciones as posicion_2 on usuarios.id_posicion_2 = posicion_2.id_posicion ";
        $this->filterClause = "where usuarios.Tut_Use_id_usuario2 like ? or usuarios.Tut_Use_id_usuario1 like ? ";    
        $this->setFilterCriteria($id);
    }

controlador:

static protected function action_lister() {
      /*  $request = new \Request();*/
        $filtrouserDAO = new \app\model\filtrouserDAO();
         $filtrouserDAO->setUserIDAsFilter(\UserSession::getLoginName());
        $jugadores = array();
        $user_id=  $filtrouserDAO->getResult();
        $filtro = $user_id['user_id'];
        $valor = (int)$filtro; // el error lo da tanto pasando el dato como integer como string
        $jugadorid = new tjugadorDAO();
        $jugadorid->setFilterTutUser($valor);
        while ($row = $jugadorid->getResult()) {
            $jugadores[] = $row;
        }
        /* Réponse retournée au contrôleur principal */
        $response = new \Response();
        $response->rows = $jugadores;
        $response->success = true;
        return $response;

los campos afecados por el filtro estan configurados como int en la base de datos ya que almacena el id de las tablas afectadas para asignar un tutor al jugador, el cual es el registrado en znetdk_users.

Saludos

Pascal Martinez

unread,
Jun 19, 2016, 3:38:29 AM6/19/16
to ZnetDK
José,

Tienes dos "?" en la propriedad filterClause de tu DAO mientras que llamas el método setFilterCriteria con solo uno parámetro.

Intenta :
$this->setFilterCriteria($id, $id);

Pascal MARTINEZ

Jose Puertas

unread,
Jun 19, 2016, 3:41:27 PM6/19/16
to ZnetDK
Muchas gracias Pascal, pensé que al usar OR solamente hacia falta pasar el parámetro una vez, pero de todas formas me devuelve un conjunto de registros vacio, te paso tres archivos con la depuración que he echo y los datos que retornan   $jugadorid (datos retorno 1), $jugadores[] (datos retorno 2)y  $response->rows = $jugadores; (datos retorno 3)

Saludos


datos retorno 3.pdf
datos retorno 1.pdf
datos retorno 2.pdf
Reply all
Reply to author
Forward
0 new messages