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

2votos

problema conexion a Mysql

Buenas,

Tengo una pagina en la cual genero unos datos que paso mediante ajax a un archivo PHP simple en el qual de momento solo quiero ejecutar un insert, pero mas adelante are mas acciones. Ahora mismo no me inserta y aparte se queda como bloqueado un rato. Os adjunto el codigo PHP:

<?php

$DBO;

if (isset($_REQUEST['inicio'])) {
    insertar($_REQUEST['inicio'], $_REQUEST['fin'], $_REQUEST['dia'], $_REQUEST['desc'],$DBO);
}

function insertar($inicio, $fin, $fecha, $desc) {
    $conexion = getDBO($DBO);
    $query=$conexion->query("INSERT INTO cita (id, inicio, fin, fecha, descripcion) VALUES ('1','$inicio','$fin','$fecha','$desc')");
    echo $query;
}

function getDBO() {
    if (!$DBO) {
        $DBO = connect();
    }
    return $DBO;
}
function connect() {
    $oDB = new PDO("mysql:host=localhost:8080;dbname=citas", "root", "");
    $oDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $oDB->query("SET NAMES utf8");
    return $oDB;
}

?>

Gracias

2 Respuestas

3votos

Leonardo-Tadei Puntos227020

Hola @JonnyReyes,

tenés un problema de ámbito de variables por el que siempre se va a llamar a connect() aunque hayas llamado antes a getDBO(). Esto es porque para que una variables en PHP pueda ser usada dentro de una función, la tenés que pasar como parámetro (o usar la mala práctica de definirla como global).

Para implementar una conexión única, buscá implementar el patrón de diseño singleton, que es un uso típico para esto.

De todas formas esto no provoca que no funcione, porque siempre se va a conectar.

Una forma de encotnrar el problema es ir poniendo prints o var_dump para ver cómo se ejecutan algunas partes del código y ver que todo esté correcto. Yo comenzaría con:

function insertar($inicio, $fin, $fecha, $desc) {
    $conexion = getDBO($DBO);
    $sql = "INSERT INTO cita (id, inicio, fin, fecha, descripcion) VALUES ('1','$inicio','$fin','$fecha','$desc')";
    print($sql); // Para debug
    $query=$conexion->query($sql);
    echo $query;
}

y revisando que la sentencia sea válida y se pueda ejeutar por ejemplo en PHPMyAdmin u otra herramienta para ejecutar comandos SQL. Podrías llamar directamente desde el navegador a este script y pasarle los parámetros por el URL, para poder ver más fácil el resultado.

Respecto a que se queda congelado, revisá si en el llamador AJAX no estás haciendo la petición sincrónica. Si fuera así, la petición para todo hasta que termina el script llamado. Para que no se bloquee tenés que hacer la petición asincrónica.

Saludos cordiales!

1voto

LeOrmazabal Puntos350

Le pasas como para metro a la funcion insertar $_REQUEST[''], que pasa si estas vienen vacias?
le estas pasando insertar(,,,,);

Recibe las variables Request en una variable, algo así:
$inicio = $_REQUEST['inicio'];

Es más claro y puedes probar mas facil la consulta ....

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