New question

Question:

Date: 02-05-2017 11:54:39 (In Spanish)

Operador LIKE en consulta con PostgreSQL[Resolved]

Tengo la consulta pero me sale error

$sql ='SELECT "OBJ_CAM".id, "OBJ_CAM".name, "OBJ_GRABBER".parent_id, "OBJ_GRABBER".ip, "OBJ_GRABBER".type
  FROM "OBJ_CAM" ,"OBJ_GRABBER"
  WHERE "OBJ_GRABBER".id="OBJ_CAM".parent_id AND "OBJ_CAM".name LIKE '%$buscar%'  ';


En la base de datos la consulta corre bastante bien la sintaxis del like es el problema

Warning: Division by zero in C:\xampp\htdocs\ISS\buscar.php on line 26
Warning: Division by zero in C:\xampp\htdocs\ISS\buscar.php on line 28
Warning: pg_query(): Query failed: in C:\xampp\htdocs\ISS\buscar.php on line 32

Error en la Consulta SQL
Tags: PHP - PostgreSQL - Query - Question - SQL Votes: 0 - Answers: 10 - Views: 10 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 03-05-2017 02:40:55 Hola Sergio, ante todo bienvenido a la comunidad.

    Como bien comentas "...En la base de datos la consulta corre..." asumo que el problema lo tienes en la forma de setear la variable $sql, observo en tu código que abres y cierras el string con comillas simples, pero cuando incluyes el LIKE también utilizas este tipo de comillas, lo que termina produciendo una ruptura en tu consulta.

    Aquí tienes varias opciones, pero lo más rápido será escapar las comillas simples del operador LIKE con contrabarra \, veamos como quedaría en tu código:

    $sql ='SELECT "OBJ_CAM".id, "OBJ_CAM".name, "OBJ_GRABBER".parent_id, "OBJ_GRABBER".ip, "OBJ_GRABBER".type
    FROM "OBJ_CAM", "OBJ_GRABBER"
    WHERE "OBJ_GRABBER".id = "OBJ_CAM".parent_id
    AND "OBJ_CAM".name LIKE \'%$buscar%\'';
    


    Prueba con esto y luego nos cuentas como te fue.

    Saludos y buen código!

    PD: con respecto a los "Warning" que comentas, asumo que se deberán a que tu consulta no esta retornando varoles y luego quieres operar con vacío/cero.... , no se, estoy especulando, necesitaría que nos des más detalle/información.
      Votes: 0 - Link answer
     
  • Date: 03-05-2017 03:36:24 Muchas gracias Fernando quedo ok con \, las sintaxis cambian un poquito con respecto al MySQL y me pierde un poco.

    Agradesco tu tiempo.
      Votes: 0 - Link answer
     
  • Date: 03-05-2017 11:44:21 tengo devuelta una trancada, la consulta se ejecuta si le pongo una palabra pero al pasar al like con la variable no me trae registros.
    $con = pg_connect($cadenaConexion) or die("Error en la Conexión: ".pg_last_error());
    
    $buscar= $_POST['palabra'];
    $sql ='SELECT "OBJ_CAM".id, "OBJ_CAM".name,"OBJ_GRABBER".parent_id,"OBJ_GRABBER".ip,"OBJ_GRABBER".type
      FROM "OBJ_CAM" ,"OBJ_GRABBER"
      where "OBJ_GRABBER".id="OBJ_CAM".parent_id and "OBJ_CAM".name LIKE \'%$buscar%\'';
    
    $result = pg_query($con,$sql) or die ("Error en la Consulta SQL");
    
    // Tomamos el total de los resultados
    $total = pg_num_rows($result);
    
    if($total>0){
    echo "<table id=filtro border='1' align='center'>
    <tr bgcolor='grace'>
    <th>ID CAM</th>
    <th>Direccion</th>
    <th>Servidor</th>
    <th>ip</th>
    <th>Tipo</th>
    </tr>";
    while ($fila=pg_fetch_array($result)) {
    echo "<tr><td>".$fila['id']."</td>";
    echo "<td>".$fila['name']."</td>";
    echo "<td>".$fila['parent_id']."</td>";
    echo "<td>".$fila['ip']."</td>";
    echo "<td>".$fila['type']."</td>";
    
    }
                    echo "</table>";
    }else{
                    echo "No hay Registros para".$buscar;
    


    la variable se carga bien con el valor ya que al hacer el echo me sale la palabra, no se que podría pasar, agradesco su ayuda y paciencia.
      Votes: 0 - Link answer
     
  • Date: 05-05-2017 09:10:56 Hola Sergio, el problema esta al momento de concatenar la variable $buscar con tu consulta SELECT, al definir el string con comillas simples no se paresa la variable $buscar.

    Lo que te recomiendo aquí es utilizar heredoc, lo cual es más correcto porque tu string es multilínea, veamos como sería para tu código:
    $sql = <<<EOF
    SELECT "OBJ_CAM".id, "OBJ_CAM".name, "OBJ_GRABBER".parent_id, "OBJ_GRABBER".ip, "OBJ_GRABBER".type
    FROM "OBJ_CAM", "OBJ_GRABBER"
    WHERE "OBJ_GRABBER".id = "OBJ_CAM".parent_id
    AND "OBJ_CAM".name LIKE '%$buscar%'
    EOF;
    

    Observa que con heredoc no es necesario escapar las comillas simples del LIKE.

    Saludos y buen código!
      Votes: 0 - Link answer
     
  • Date: 05-05-2017 11:09:48 bUENAS

    Ya probe pero no me reconoce el <<<EOF EOF; es como que no cierra la cadena y anula el codigo que sigue tengo corriendo php 5.4
      Votes: 0 - Link answer
     
  • Date: 05-05-2017 13:11:11 Hola Sergio, observa que adjunte un enlace a la documentación de heredoc, lee la advertencia:

    Advertencia
    Es muy importante señalar que la línea con el identificador de cierre no debe contener ningún otro carácter, excepto un punto y coma (;). Esto, en especial, significa que el identificador no debe estar sangrado, y que no debe existir ningún espacio ni tabulación antes o después del punto y coma. Es muy importante observar que el primer carácter antes del identificador de cierre debe ser un salto de línea definido por el sistema operativo local. Este es \n en los sistemas UNIX, incluyendo Mac OS X. Al delimitador de cierre le ha de seguir tambíen una nueva línea.
    Si se rompe esta regla y el identificador de cierre no está "limpio", no será considerado como un identificador de cierre, por lo que PHP continuará buscando uno. Si no se encuentra ningún identificador de cierre apropiado antes del final del fichero, se producirá un error de análisis en la última línea.
    No se puede emplear Heredoc para inicializar las propiedades de una clase. Desde PHP 5.3, esta limitación es válida solamente para un heredoc que contengan variables.


    Realiza algunas pruebas y luego nos cuentas como te fue!

    Saludos,

    PD: sino también puedes concatenar tu variable $buscar con el punto "." (sin usar heredoc)
      Votes: 0 - Link answer
     
  • Date: 06-05-2017 07:29:11 Creo que debes arreglar el tema de comillas en tu codigo trabajo con PHP y Postgresql, deberias de encerrar la consulta completa entre comillas dobles " y todo lo que vaya dentro deberias de ponerlo con comillas simples ' algo asi:

    $sql ="SELECT 'OBJ_CAM'.id, 'OBJ_CAM'.name,'OBJ_GRABBER'.parent_id,'OBJ_GRABBER'.ip,'OBJ_GRABBER'.type
    FROM 'OBJ_CAM' ,'OBJ_GRABBER'
    WHERE 'OBJ_GRABBER'.id='OBJ_CAM'.parent_id AND 'OBJ_CAM'.name LIKE '%$buscar%' '';

    ademas te aconsejo trabajar con los nombres de bases de datos, tablas y campos en minusculas para que evites las comillas dentro de la consulta
      Votes: 1 - Link answer
     
  • Date: 08-05-2017 06:10:19 Buenas Estimados agradezcos sus comentarios el problema con el EDO fue el espacio que habia como dice la advertencia no tienen que haber sangrias siempre dejamos pasar las observaciones y son importantes gracias Fernando   Votes: 1 - Link answer
     
  • Date: 08-05-2017 06:14:23 Maxi sobre lo que me mencionas si realizo como explicas la query no corre desde el pgadmin mismo es por eso que deje "" es por eso que necesitaba una salida a esta query lo cual solucione con el HEREDOC   Votes: 0 - Link answer
     
  • Date: 08-05-2017 08:08:50 Sergio

    Me complace que hayas podido resolver el tema, pero vuelvo a hacerte la sugerencia:

    "te aconsejo trabajar con los nombres de bases de datos, tablas y campos en minúsculas para que evites las comillas dentro de la consulta"

    Acabo de realizar esta consulta dentro de una base de datos que tengo a la disposición y funciona perfectamente en pgadmin3.

    SELECT parcelario.direccion,inmuebles_direcciones.colonia FROM parcelario,inmuebles_direcciones WHERE parcelario.clave = inmuebles_direcciones.clave AND inmuebles_direcciones.colonia LIKE '%PARC%';

    Y desde PHP seria:

    $buscar = $_POST['buscar'];
    $sql = "SELECT parcelario.direccion,inmuebles_direcciones.colonia FROM parcelario,inmuebles_direcciones WHERE parcelario.clave = inmuebles_direcciones.clave AND inmuebles_direcciones.colonia LIKE '%$buscar%';"

    La idea es la misma solo que yo he realizado la consulta con los campos de mi BD.

    PD. El uso de las minúsculas tanto para BD, Tablas y nombres de Campos dentro de una BD PostgreSQL te ayuda infinitamente.
      Votes: 1 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com