1 votos

Error fatal al usar PDO en PHP

Saludo cordial, me encuentro desarrollando una página web de consultas de la Biblia, y aunque ya hice gran parte del trabajo de los controles, me está generando un error fatal al usar el api PDO de PHP. adjunto los archivos y el error por si alguien me puede ayudar. Gracias de antemano:

conectabd.php

<?php

$host = 'localhost';
$base = 'biblia3';
$usuario = 'root';
$password ='toor';
try{
    $conn = new PDO('mysql:host='.$host.';dbname='.$base.'', $usuario, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->exec("SET CHARACTER SET utf8");
}catch(PDOException $e){
    echo "ERROR: " . $e->getMessage();
}

busca_texto.php

<?php
include'conectabd.php';
//include'index.php'; en otro php sí me funciona con este include
error_reporting(E_ALL ^ E_NOTICE);
    $lib = $_GET['selected']; 
    $cap =$_GET['selected2'];

 $sql = $conn->prepare('SELECT VERSICULO, CONTENIDO FROM TEXTO WHERE COD_LIBRO='.$lib.' '.'AND CAPITULO='.$cap.' ');
 $sql = $conn->query('SELECT COD_TEXTO, CAPITULO FROM TEXTO WHERE COD_LIBRO='.$cap.'GROUP BY CAPITULO ORDER BY COD_TEXTO'); 
 $sql->execute();
 $resultado = $sql->fetchAll();

    foreach ($resultado as $row) {
        echo $row['0']." ".$row['1']."</br>";
    }

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY CAPITULO ORDER BY COD_TEXTO' at line 1' in C:\xampp\htdocs\Biblia1_1\busca_texto.php:12 Stack trace: #0 C:\xampp\htdocs\Biblia1_1\busca_texto.php(12): PDOStatement->execute() #1 C:\xampp\htdocs\Biblia1_1\index.php(6): include('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\Biblia1_1\busca_texto.php on line 12

2voto

aEscarcha Puntos 220

Hola, es algo raro lo que estás haciendo con el prepare te devuelve una sentencia preparada que tu luego debes ejecutar con un execute, por lo que tu primera query no se debe estar ejecutando jamás, te recomiendo que o hagas las dos queries con prepare y execute o hagas las dos con $conn->query pasando los datos a varaibles distintas.

Aparte de esto, tienes un syntax error en la segunda query, prueba a hacer un echo del SQL en vez de lanzar la consulta y ver si te funciona directamente en PHPmyAdmin o lo que utilices, es posible que sea por que:

  • $cap no sea numérico, por lo que necesitarías ponerle comillas
  • Te falta un espacio antes del GROUP BY CAPITULO

0voto

Moisés AC Puntos 530

Hola. Suelen ser de sintaxis estos errores, ya te lo dice el propio mensaje, algo que se echa de menos con otros lenguajes. Si te aconsejo que para las sentencias MySQL hagas lo siguiente:

  • Palabras del lenguaje en mayúsculas
  • Nombres de los campos en minúsculas

Esto hace las sentencias más legibles y MySQL es case-insensitive con respecto al nombre de los campos, tablas, etc. Por ejemplo, las siguiente dos sentencias deberían funcionar exactamente, pero por legibilidad usa la primera:

SELECT * FROM autores WHERE nombre='xxx'
SELECT * FROM AUTORES WHERE NOMBRE='xxx'

Saludos.

0voto

Reymagnus Puntos 40

Hola, cordial saludo a todos. Sí, efectivamente, fue un error de novato (porque lo soy) y estaba mal la sintaxis y la forma como ejecutaba el query. $cap es de tipo caracter y por eso el error fatal, es que php es muy alarmista jejeje.

Gracias por la ayuda doy el tema como solucionado y terminado.

0 votos

Hola, acepta la respuesta pls así me dan mas puntitos :)

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: