entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

problema con mysqli_errno()

Buenas. Me ha salido un problemilla y no se por donde salir.
Al hacer un insert en una BD, utilizaba mysql_errno() para ver si había algún fallo, en concreto si un campo único se duplicaba, si era así mostraba un mensaje. Este es un proyecto que tenía apartado y antes me funcionaba bien, y me he puesto ahora para acabarlo, y claro, en las conexiones he tenido que cambiar cosas, ya que mysql_connect esta desfasado, etc....... y utilizar mysqli.
El problema es que el mysql_errno() no hace nada, y lo he cambiado al mysqli_errno() y me da un error. He estado mirando documentación de PHP y veo que hay que pasarle algo tipo así "mysqli_errno($link); pero al tocar las conexiones me he liado y estoy perdidísimo.
dejo los archivos de la conexiones:
conexion.php:

<?php 

class Conector{
public $mysqli = null;
var $conect;
var $BaseDatos;
var $Servidor;
var $Usuario;
var $Clave;

function Conector(){
    $this->BaseDatos = "calendario_bd";
    $this->Servidor = "localhost";
    $this->Usuario = "root";
    $this->Clave = "";

}

function conectar() {
        //MySQLi
    $this->mysqli = new mysqli(
        $this->Servidor,
        $this->Usuario,
        $this->Clave,
        $this->BaseDatos
        );
    if ($this->mysqli->connect_errno)
    {
        die
        ( 
            "Falla la conexión a MySQL: ("
             . $this->mysqli -> mysqli_connect_errno() . 
             ") " . $this->mysqli -> mysqli_connect_error()
        );
    }
}

}
?>

basedatos.php

    <?php 
include_once("conexion.php");

class BaseDatos{
    //constructor   
    var $con;

    function BaseDatos(){
        $this->con=new Conector;
        $this->con->conectar();
    }

    function Consultar($q){
        $this->con->mysqli->query("SET NAMES 'utf8'");
            $query = $this->con->mysqli->query($q);

            return $query;
    }

}
$bd = new BaseDatos;
?>

y aqui es donde hago la llamada al mysqli_errno();

controller.php

    <?php 

     function insertDate($fechaP, $nombreP, $lugarP, $emailP, $horaP, $asistentesP, $descripcionP) {  

                            $thisDate = strtotime ( $fechaP); 
                            $dateFormat1 = date ( ' Y-m-d', $thisDate ) ; 

                            $Nombre = $nombreP;
                            $Lugar = $lugarP;
                            $Email = $emailP;
                            $Fecha = $dateFormat1 . " " . $horaP;
                            $FechaSimple = $dateFormat1;
                            //$Hora = $_POST['Hora'];
                            $Asistentes = $asistentesP;
                            $Descripcion = $descripcionP;

                             $bd = new BaseDatos;

                            $qRead = $bd->Consultar ("insert into `calendario` 
                        (`nombre`, `lugar`, `email`, `fecha`, `fecha_simple`, `asistentes`, `descripcion`)
                        value ('$Nombre','$Lugar','$Email','$Fecha','$FechaSimple','$Asistentes','$Descripcion');");

                            $error = mysqli_errno();
                            if ($error != 0){ 

                                echo '<script type="text/javascript">// <![CDATA[
                                 alert("La fecha y la hora corresponden a una cita existente, por favor, inserte otra fecha u otro horario. Gracias.");
                                // ]]></script>';

                            } else{
                                echo '<script type="text/javascript">// <![CDATA[
                                 alert("Cita concertada correctamente.");
                                // ]]></script>';
                            }

                        $Fecha = "";

    }

?>

ha ver si alguien me sabe orientar......

2 Respuestas

5votos

carlossevi Puntos63580

Vamos al origen, a la documentación: http://php.net/manual/es/mysqli.errno.php

Tienes dos formas de utilizar la función:

  1. Estilo orientado a objetos: $mysqli->errno;
  2. Estilo por procedimientos: mysqli_errno (mysqli $link);

En ambos casos necesitas acceso al objeto de tu conexión: mysqli, y esto nos da la principal pista: no estas haciendo esta llamada en el sitio correcto según la arquitectura que planteas. No tiene sentido que tengas acceso a este objeto desde el controlador, y por eso tampoco tiene sentido que itentes la llamada a ese método en ese punto.

Una solución podría ser añadir a tu clase de manejo de base de datos un método para obtener el error:

En el controlador:

// Sustituir:
// $error = mysqli_errno();
$error = $bd->ErrNo();

En la base de datos, añadir el método:

function ErrNo(){
    return $this->con->mysqli->errno;
}

4votos

white Puntos75880

Hola @nachito777sk, estas intentando hacer una conexion con mysql_connect, recuerda que debes usar una nueva instancia de mysqli para usarlo en conjunto con mysqli_errno.

reemplaza tu metodo conectar() por este:

<?php

function conectar() {
    //MySQLi
    $this->mysqli = new mysqli(
        $this->Servidor,
        $this->Usuario,
        $this->Clave,
        $this->BaseDatos
    );

    if ($this->mysqli->connect_errno)
    {
        die
        (
            "Falla la conexión a MySQL: (" .
            $this->mysqli -> mysqli_connect_errno() . 
            ") " . $this->mysqli -> mysqli_connect_error()
        );
    }
}

asegurate de que tu clase Conector tenga estos campos:

class Conector{
    var $conect;
    var $BaseDatos;
    var $Servidor;
    var $Usuario;
    var $Clave;
    var $mysqli; // <--- agregado $mysqli

agrega este metodo a tu clase BaseDatos:

function get_connection()
{
    return $this->con->mysqli;
}

reemplaza en tu fichero controller.php esto:

$error = mysqli_errno();

por esto:

$error = mysqli_errno($bd->get_connection());

Extensión MySQLi - tutorial
La extensión MySQLI
Conectar php con mysql usando mysqli

saludos!

0voto

nachito777sk comentado

Me equivoqué en el archivo conectar.php, ese que he puesto era el antiguo, lo he editado y he puesto el que tengo realmente.

0voto

white comentado

hiciste los cambios que puse en los otros archivos? deberia funcionar normalmente si no funciona podrias poner aca el error que tienes, intenta con la solucion que te propone @carlossevi

0voto

nachito777sk comentado

ahora va perfecto. Y además lo he entendido, en controller.php no tenía el objeto, por lo tanto no devolvía ningún error,o mejor dicho, si me daba uno, pero por que esperaba un entero y no recibía ninguno, y con la función añadida devuelvo precisamente el objeto de la conexión, y es aquí donde ya puedo verificar si hay error. Ahora perfecto. Esto me pasa por haberlo dejado apartado tanto tiempo.
Gracias a los dos, las dos opciones eran válidas.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta