Error de conexion a MySQL

edited junio 2008 in Principiantes
Hola a todos, mi problema es el siguiente:

Tengo un controlador con varias acciones dentro, y tengo un archivo en la carpeta controllers en donde hay varias funciones que se conectan a la base de datos. Todas las vistas del controlador utilizan un plantilla en donde se llama a una funcion del archivo de funciones que se encarga de construir un menu. Pero cuando dentro de alguna accion del controlador intento llamar a otra funcion del archivo de funciones y esta acción interactue por medio de algun modelo con la base de datos, me sale el siguiente error:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\AppServ\www\kerp\forms\db\adapters\mysql.php on line 127

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\AppServ\www\kerp\forms\db\adapters\mysql.php on line 127

KumbiaDBException: Access denied for user 'ODBC'@'localhost' (using password: NO) al ejecutar 'SELECT COUNT(*) FROM unidadesmedidas WHERE 1 and umedida_bloqueado = 'N' and umedida_act = 'S' '
Error Code: 1045
En el archivo C:\AppServ\www\kerp\forms\db\adapters\mysql.php en la línea: 135
#0 C:\AppServ\www\kerp\forms\db\main.php(169): db->query('SELECT COUNT(*)...')
#1 C:\AppServ\www\kerp\forms\db\active_record.php(742): dbBase->fetch_one('SELECT COUNT(*)...')
#2 C:\AppServ\www\kerp\controllers\unidadesmedidas_controller.php(66): ActiveRecord->count('1 and umedida_b...')
#3 [internal function]: UnidadesmedidasController->sql('')
#4 C:\AppServ\www\kerp\kumbia.php(201): call_user_func_array(Array, Array)
#5 C:\AppServ\www\kerp\public\index.php(76): Kumbia::main()
#6 {main}

Session Dump

string(152) "a:3:{s:14:"ss_ultimo_menu";i:18467;s:22:"ss_umedida_condiciones";s:52:"1 and umedida_bloqueado = 'N' and umedida_act = 'S' ";s:10:"ss_empl_id";s:1:"1";}

La funcion trabaja perfecto, puesto que en otras acciones del controlador la llamo y no me genera errores, siempre y cuando dentro de esa acción no utilice nada que tenga que ver con la base de datos.

Ayudenme por favor....

Comentarios

  • Puedes mostrar Códgo...?
  • edited 7:23
    Controlador:

    <?php

    class UnidadesmedidasController extends ApplicationController {

    public $template = "plantilla_intranet";
    public $modulo_codigo = "209010";

    public function before_filter($controlador, $accion, $id) {

    if (Session::get('ss_empl_id') == 0) {
    Flash::error('Para poder acceder a Unidades de Medidas, debe primero iniciar una sesión.');
    $this->route_to("controller: intranet", "action: login");
    }

    }

    function index () {

    $permisos = explode("|",f_chk_permisos(Session::get('ss_empl_id'),$this->modulo_codigo),1000);
    if ($permisos[0] == "XX") {
    Flash::error("ERROR: " . $permisos[1]);
    $this->add = "N";
    $this->go = "N";
    }
    else {
    $this->add = $permisos[1];
    $this->go = $permisos[0];
    }

    }

    function presql() {

    $permisos = explode("|",f_chk_permisos(Session::get('ss_empl_id'),$this->modulo_codigo),1000);
    if ($permisos[0] == "XX") {
    $this->route_to("action: index");
    }
    else {
    $this->add = $permisos[1];
    $this->go = $permisos[0];
    }

    }

    function sql() {

    $permisos = explode("|",f_chk_permisos(Session::get('ss_empl_id'),$this->modulo_codigo),1000);

    $this->add = $permisos[1];
    $this->upd = $permisos[2];
    $this->del = $permisos[3];
    $this->go = $permisos[0];

    $condiciones = "1 ";
    $condiciones .= ($this->request("id") != "")? "and id " . f_pre_sql("N",$this->request("id")) . " " : "";
    $condiciones .= ($this->request("umedida_abreviatura") != "")? "and upper(umedida_abreviatura) " . f_pre_sql("T",strtoupper($this->request("umedida_abreviatura"))) . " " : "";
    $condiciones .= ($this->request("umedida_nombre") != "")? "and upper(umedida_nombre) " . f_pre_sql("T",strtoupper($this->request("umedida_nombre"))) . " " : "";
    $condiciones .= ($this->request("umedida_bloqueado") != "NULO")? "and umedida_bloqueado = '" . $this->request("umedida_bloqueado") . "' " : "";
    $condiciones .= ($this->request("umedida_act") != "NULO")? "and umedida_act = '" . $this->request("umedida_act") . "' " : "";

    $this->consulta = $condiciones;
    $this->paginado = "0," . $this->request("paginas");
    $this->ordenamiento = "id asc";

    $this->pagina_nro_reg = $this->request("paginas");
    $this->pagina_ult = floor($this->Unidadesmedidas->count($condiciones) / $this->pagina_nro_reg);
    $this->pagina_n = 0;

    Session::set_data('ss_umedida_condiciones',$condiciones);

    }

    function sqlgo ($pagina_nro_reg = null, $pagina_ult = null, $pagina_n = null, $orderby = null, $az = null, $reorder = "N") {
    $this->set_response('view');

    $this->paginado = $pagina_n * $pagina_nro_reg . ", " . $pagina_nro_reg;
    $this->pagina_n = $pagina_n;

    $this->ordenamiento = $orderby . " " . $az;
    $this->orderby = $orderby;
    $this->az = $az;
    }

    function not_found () {

    Flash::warning("La acción solicitada no esta definida.");
    return $this->route_to('action: index');

    }
    }

    ?>

    Archivo que contiene las funciones:

    <?php

    function conexion_kerp () {

    $db_gnv = new db("localhost","root","paraque","kerp");
    $db_gnv = db::raw_connect();

    return $db_gnv;

    }

    function menu ($usuario,$aleatorio) {

    if (Session::get('ss_ultimo_menu') != 0) {
    $file_to_del = 'public/temp/menus/menu_' . $usuario . '_' . Session::get('ss_ultimo_menu') . '.xml';
    unlink($file_to_del);
    }
    Session::set_data('ss_ultimo_menu',$aleatorio);


    // CONEXION A LA BASE DE DATOS Y EXTRACCION DE LA INFORMACION DEL MENU DE LAS TABLAS DEL SISTEMA

    $query_opciones_menu = "SELECT DISTINCT empl_nombres, empl_apellidos, modul_codigo, length(modul_codigo ) /2 AS nivel, modul_nodohoja, modul_nombre, modul_php, modul_visible, modul_destino
    FROM modulos, perfiles, perfilesmodulos, empleados
    WHERE empleados.perfiles_id = perfiles.id
    AND perfiles.id = perfilesmodulos.perfiles_id
    AND locate(modul_codigo,modulos_codigo,1) = 1
    AND empleados.id = $usuario
    AND modul_visible = 'S'
    ORDER BY 3";
    $db = conexion_kerp();
    $db->query($query_opciones_menu);
    $row_opciones_menu = $db->fetch_array();

    $nombre_empleado = $row_opciones_menu . " " . $row_opciones_menu;

    $archivo_menu = "public/temp/menus/menu_" . Session::get('ss_empl_id') . "_" . Session::get('ss_ultimo_menu') . ".xml";
    $xml_menu = fopen($archivo_menu,"w");
    $cadena_xml_menu = "<?xml version='1.0' ?>
    ";
    fwrite($xml_menu,$cadena_xml_menu);
    $cadena_xml_menu = '<menu maxItems="12" name=" " mixedImages="yes">
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    $cadena_xml_menu = '<MenuItem name="MENU" id="0" width="30px" withoutImages="yes">
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    $nivel_ant = $row_opciones_menu;
    do {
    $nivel_act = $row_opciones_menu;
    if ($nivel_act < $nivel_ant) {
    $cierres = $nivel_ant - $nivel_act;
    for ($i = 1; $i <= $cierres; $i++) {
    $cadena_xml_menu = '</MenuItem>
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    }
    }

    if ($row_opciones_menu == "A") {
    $cadena_xml_menu = '<MenuItem name="' . $row_opciones_menu . '" id="' . $row_opciones_menu . '" width="30px" withoutImages="yes">
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    }
    else {
    $cadena_xml_menu = '<MenuItem name="' . $row_opciones_menu . '" href="/kerp/' . $row_opciones_menu . '" target="' . $row_opciones_menu . '" id="' . $row_opciones_menu . '"/>
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    }
    $nivel_ant = $nivel_act;
    } while ($row_opciones_menu = $db->fetch_array());

    $cierres = $nivel_ant - 1;
    for ($i = 1; $i <= $cierres; $i++) {
    $cadena_xml_menu = '</MenuItem>
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    }
    $cadena_xml_menu = '</MenuItem>
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    $cadena_xml_menu = '<MenuItem name="CERRAR SESION -> ' . $nombre_empleado . '" href="/kerp/intranet/logout" target="_self" id="logout"/>
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    $cadena_xml_menu = '</menu>
    ';
    fwrite($xml_menu,$cadena_xml_menu);
    fclose($xml_menu);

    $db->close();

    }

    function f_pre_sql ($tipo_dato,$campo) {

    $campo = trim($campo);

    switch ($tipo_dato) {
    case "N" :
    $tmp = explode(" ",$campo,1000);
    if ($tmp[1] != "") {
    $pre_sql = $campo . " ";
    }
    else {
    $tmp = explode(",",$campo,1000);
    if ($tmp[1] != "") {
    $pre_sql = "in (" . $campo . ") ";
    }
    else {
    $tmp = explode("-",$campo,1000);
    if ($tmp[1] != "") {
    $pre_sql = "between " . $tmp[0] . " and " . $tmp[1] . " ";
    }
    else {
    $pre_sql = "= " . $campo . " ";
    }
    }
    }
    break;
    case "T" :
    $pre_sql = "like '%" . $campo . "%' ";
    break;
    case "F" :
    $tmp = explode(" ",$campo,1000);
    if ($tmp[1] != "") {
    $pre_sql = $tmp[0] . "'" . $tmp[1] . " 00:00:00' ";
    }
    else {
    $tmp = explode(",",$campo,1000);
    if ($tmp[1] != "") {
    $pre_sql = "in (" . $campo . ") ";
    }
    else {
    $tmp = explode("-",$campo,1000);
    if ($tmp[1] != "" && strlen($campo) > 10) {
    $pre_sql = "between '" . $tmp[0] . "-" . $tmp[1] . "-" . $tmp[2] . " 00:00:00' and '" . $tmp[3] . "-" . $tmp[4] . "-" . $tmp[5] . " 23:59:59'";
    }
    else {
    $pre_sql = "between '" . $campo . " 00:00:00' and '" . $campo . " 23:59:59'";
    }
    }
    }
    break;
    }
    return $pre_sql;
    }

    function f_chk_permisos ($usuario, $modulo) {

    $sql_permisos = "SELECT *
    FROM empleados, perfiles, modulos, perfilesmodulos
    WHERE empleados.perfiles_id = perfiles.id
    AND perfiles.id = perfilesmodulos.perfiles_id
    AND modulos.modul_codigo = perfilesmodulos.modulos_codigo
    AND empleados.id = " . $usuario . "
    AND modulos.modul_codigo = '" . $modulo . "'";

    $db = conexion_kerp();
    $db->query($sql_permisos);

    $sw = 0;
    $i = 0;
    $msg = "";
    while ($row_permisos = $db->fetch_array()) {
    $i++;
    if ($row_permisos == 'S') {
    $sw = 1;
    $msg .= "El usuario se encuentra bloqueado. ";
    }
    if ($row_permisos == 'N') {
    $sw = 1;
    $msg .= "El usuario se encuentra inactivo en el sistema. ";
    }
    if ($row_permisos == 'S') {
    $sw = 1;
    $msg .= "El perfil del usuario se encuentra bloqueado. ";
    }
    if ($row_permisos == 'N') {
    $sw = 1;
    $msg .= "El perfil del usuario se encuentra inactivo. ";
    }
    if ($row_permisos == 'S') {
    $sw = 1;
    $msg .= "El modulo se encuentra bloqueado. ";
    }
    if ($row_permisos == 'N') {
    $sw = 1;
    $msg .= "El modulo se encuentra inactivo. ";
    }
    if ($sw == 0) {
    $msg = "OK|" . $row_permisos . "|" . $row_permisos . "|" . $row_permisos . "|" . $row_permisos;
    }
    }
    if ($sw == 1) {
    $msg = "XX|" . $msg;
    }
    if ($i == 0) {
    $sw = 1;
    $msg = "XX|El usuario no tiene permisos para acceder al modulo.";
    }

    $db->close();

    return $msg;
    }
    ?>

    Bueno, como puedes ver en el controlador, en las acciones "index" y "presql" estoy llamando a una función llamada f_chk_permisos que se encuentra en el archivo de funciones. En ambos casos, funciona a las mil maravillas, pero cuando intento llamar esa misma función desde la accion "sql" me sale el error que indique inicialmente. Ademas de esto, el controlador utiliza una plantilla en donde se llama a la función "menu" del archivo de funciones.

    Que puede ser... te agradezco tu colaboración.
  • edited 7:23
    Listo, ya quedo mi problema resuelto.

    Cree una tabla en la base de datos llamada funciones y cree su respectivo modelo, dentro de este, coloque todas las funciones que acceden a la base de datos y listo.
  • edited 7:23
    Listo, ya quedo mi problema resuelto.

    Cree una tabla en la base de datos llamada funciones y cree su respectivo modelo, dentro de este, coloque todas las funciones que acceden a la base de datos y listo.
    tengo una pregunta como relacionaste lo que te daba de las sentencias de la base de datos.. es decir de las consultas.. o mejor dicho como enviabas el valor de la consulta al controlador?
Sign In or Register to comment.