PHP - Controlar excepciones de mysql desde php

 
Vista:
Imágen de perfil de Matias
Val: 12
Ha aumentado su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Controlar excepciones de mysql desde php

Publicado por Matias (4 intervenciones) el 07/05/2020 02:47:27
Hola a todos, soy nuevo en esta pagina y concurro a ustedes para saber como puedo capturar una exepcion de mysql por ejemplo de valor duplicado y enviar un aviso a la pagina.
El codigo de insercion a la bd es la siguiente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public function insertTask(&$data){
    try {
        $this->db->query('call sp_insert_task(:n, :idr)');
        $this->db->bind(':n', $data['name']);
        $this->db->bind(':idr', $data['id_role']);
    } catch (Exception $e) {
        $this->db->error = $e->getMessage();
        return $this->db->error;
    }
 
    if ($this->db->execute()) {
        $data['id_task'] = $this->db->lastId();
        return true;
    }else{
        return false;
    }
 
}

al momento de insertar un valor duplicado, salta la excepcion y me interrumpe con el siguiente mensaje

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ventas-1' for key 'name'' in C:\xampp\htdocs\Framework-mvc\app\libreries\DataBase.php:64 Stack trace: #0 C:\xampp\htdocs\Framework-mvc\app\libreries\DataBase.php(64): PDOStatement->execute() #1 C:\xampp\htdocs\Framework-mvc\app\models\task.php(60): DataBase->execute() #2 C:\xampp\htdocs\Framework-mvc\app\controllers\tasks.php(32): task->insertTask(Array) #3 [internal function]: tasks->create() #4 C:\xampp\htdocs\Framework-mvc\app\libreries\Core.php(42): call_user_func_array(Array, Array) #5 C:\xampp\htdocs\Framework-mvc\public\index.php(5): Core->__construct() #6 {main} thrown in C:\xampp\htdocs\Framework-mvc\app\libreries\DataBase.php on line 64

cual podria ser la solucion? desde ya gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.991
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Controlar excepciones de mysql desde php

Publicado por Julio (830 intervenciones) el 07/05/2020 08:44:08
Hola.

Prueba con cazarla con mysqli_sql_exception.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matias
Val: 12
Ha aumentado su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Controlar excepciones de mysql desde php

Publicado por Matias (4 intervenciones) el 07/05/2020 19:16:04
si, lo eh utilizadon dentro de try cach capturando el codigo del error para luego mostrarlo por pantalla, pero no me muestra el mensaje y me salta el error que ya puse en la publicacion no se is lo eh estado utilizando bien o que, no tendias un ejemplo de ocmo utilizarlo?

pd: utilizo pdo no si si tiene algo que ver al momento de la implementqacion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 988
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Controlar excepciones de mysql desde php

Publicado por javier (253 intervenciones) el 07/05/2020 20:14:46
Hola,

que framework estas usando?
en la consulta que haces estas llamando a un procedimiento almacenado y ese tema es algo complejo de solucionar, por que ya estan almacenados y los habrias de cambiar y es eso o hacer tu el query a mano.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matias
Val: 12
Ha aumentado su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Controlar excepciones de mysql desde php

Publicado por Matias (4 intervenciones) el 09/05/2020 11:55:53
hola como estas, gracias por responder. estoy utilizando un framewok propio que hice atraves de uno ejemplos.voy a tener que veri si podre capturar la excepcion atraves del PDO y si no tendere que hacerlo como vos dijiste. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 988
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Controlar excepciones de mysql desde php

Publicado por javier (253 intervenciones) el 09/05/2020 12:32:03
Hola, hazle un try catch a execute(): tambien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Matias
Val: 12
Ha aumentado su posición en 5 puestos en PHP (en relación al último mes)
Gráfica de PHP

Controlar excepciones de mysql desde php (SOLUCIONADO)

Publicado por Matias (4 intervenciones) el 09/05/2020 12:46:04
vos sabes que si, recien me di cuenta que el executa esta afuera del try cach, la solucion estaba delenta de mis ojo y ni m epercate jajaja. Ademas lo solucione en ves de usar Exception en el cach, utilizo PDOException donde capturo todos los errores de la bd por el PDO. gracias a todos por tomar su valiso tiempo en reponder mi dudas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de javier
Val: 988
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Controlar excepciones de mysql desde php (SOLUCIONADO)

Publicado por javier (253 intervenciones) el 09/05/2020 14:47:20
claro!!

1
2
3
4
5
6
7
8
9
10
11
12
try{
 
//codigo de la consulta
 
}
catch(PDOException $e){
                //return 0;
                echo 'algo mal escribiendo los datos.'.$e;
                exit;
        }
 
      }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar