Ver Mensaje Individual
  #8 (permalink)  
Antiguo 08/01/2012, 14:50
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema al extraer consulta de datos de BD

Hay varios detalles:
LIKE es una palabra reservada de MySQL, porque es una cláusula usada en el WHERE para búsquedas por patrones o similitudes por aproximación. En ese sentido, si por accidente se le pone ese nombre a la tabla, el nombre debe estar siempre encerrado entre acentos inversos, tal y como haces en los siguientes dos ejemplos.
En ese sentido, esta consulta debería generar un error de sintaxis:
Código MySQL:
Ver original
  1. SELECT `like`.`id`
  2. ORDER BY `like`.`id` ASC
Si por milagro no lo hace, perfecto.

Esta otra, por su lado, está bien:
Código MySQL:
Ver original
  1. FROM  `like`
  2. ORDER BY  `like`.`id` DESC
  3. LIMIT 0 , 9

ya que el "like" está encerrado correctamente y se interpretará como nombre de tabla.

Pero lo que pusiste en el script, está mal escrito:
Código MySQL:
Ver original
  1. FROM `like`
  2. WHERE `id` "%$search%"
Está mal, por al menos dos detalles:
1) No está claro qué comparación harás con el "id" en el WHERE.
2) Se infiere que quisiste copiar el ejemplo del caso que linkeaste, pero en ese la sintaxis es diferente:
Código MySQL:
Ver original
  1. $consulta = "select * from tabla where ".$tipobusqueda." like '%".$busqueda."%' ";
que si la escribimos sin los encadenamientos (.), y en una sola cadena qeudaría:
Código MySQL:
Ver original
  1. from tabla
  2. where $tipobusqueda like '%$busqueda%'
Si observas, LIKE en este caso es la cláusula del WHERE, como te decía, pero además los "%" son parte de la cadena del valor buscado, y además quedan encerrados entre apóstrofos, como deben ir las cadenas de texto en una sentencia de MySQL.
Si comparamos lo de ese ejemplo con lo tuyo notamos que: a) Te olvidaste de encerrar la expresión en apóstrofes, y b) no definiste la operación de comparación con el "like.id", como ya dije.

En ese contexto, si no indicas la operación, el resultado sería un error de MySQL, que no veo que estés capturando como tal.

Código PHP:
Ver original
  1. $search = $_POST['search'];
  2. $res = mysql_query("SELECT * FROM `like` WHERE `id` "%$search%"");
contra:
Código PHP:
Ver original
  1. $search = $_POST['search'];
  2. $res = mysql_query("SELECT * FROM `like` WHERE `id` LIKE '%$search%'");

En resumen, es posible que se produzca un error de sintaxis que no estés controlando, o que la sintaxis quede relativamente coherente, pero lógicamente errónea , y no devuelva datos, dependiendo de lo que llegue en la variable, que no se ve en los scripts que posteas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)