2011-12-16 17 views
8

Cualquier idea ayudaría, he estado en esto por un tiempo y no puedo entender qué está mal.La consulta MySQL funciona en phpmyadmin pero no a través de php

Problema: la consulta funciona bien hasta que agregue en la búsqueda de palabras múltiples que se puede ver en negrita a continuación. Sin embargo, hice eco de la consulta SQL y luego pegué en phpmyadmin y funcionó perfectamente, pero a través de php resulta en 0 registros. No tiene ningún sentido y no puedo averiguar qué podría estar causando un resultado de 0.

SELECT 
     DISTINCT c.id 
    FROM 
     carpets AS c 
     INNER JOIN carpet_relations AS r1 ON c.id = r1.carpet_id 
     INNER JOIN carpet_relations AS r2 ON c.id = r2.carpet_id 
     INNER JOIN carpet_relations AS r3 ON c.id = r3.carpet_id 
    WHERE 
     c.active = '1' 



     AND ((c.title LIKE '%north tabriz%') OR **(c.title LIKE '%north%') OR (c.title LIKE '%tabriz%')** OR (c.item_no LIKE '%north tabriz%') OR **(c.item_no LIKE '%north%') OR (c.item_no LIKE '%tabriz%')** OR (c.pattern LIKE '%north tabriz%') OR **(c.pattern LIKE '%north%') OR (c.pattern LIKE '%tabriz%')** OR (c.period LIKE '%north tabriz%') OR **(c.period LIKE '%north%') OR (c.period LIKE '%tabriz%')** OR (c.country LIKE '%north tabriz%') **OR (c.country LIKE '%north%') OR (c.country LIKE '%tabriz%')**) 

     AND (c.width_feet BETWEEN '0' AND '22') 
     AND (c.width_inches BETWEEN '0' AND '11') 
     AND (c.height_feet BETWEEN '0' AND '49') 
     AND (c.height_inches BETWEEN '0' AND '11') 
    ORDER BY 
     c.item_no 


id int(11) NO PRI  NULL auto_increment 
active int(11) NO  NULL  
title varchar(250) NO  NULL  
item_no  varchar(250) NO  NULL  
country  varchar(250) NO  NULL  
period varchar(250) NO  NULL  
pattern  varchar(250) NO  NULL  
price float NO  NULL  
web_special  float NO  NULL  
notes text NO  NULL  
width_feet int(11) NO  NULL  
width_inches int(11) NO  NULL  
height_feet  int(11) NO  NULL  
height_inches int(11) NO  NULL  
restrict int(11) NO  NULL  
views_amount int(11) NO  NULL  
last_modified datetime NO  NULL  
modified_by  int(11) NO  NULL 
+0

¿Funciona alguna otra declaración más fácil en su contexto? (Como SELECT * FROM alfombras) – djot

+0

Sería útil ver los esquemas de tabla y el error de mysql. – Brian

+0

sí lo hacen tan bien como si las áreas que están rodeadas por ** se eliminan, entonces funciona bien en la parte delantera ... sin embargo, cuando agrego esas secciones allí en la parte delantera, no funciona y en el backend (phpmyadmin) lo hace –

Respuesta

1

Prueba esto:

SELECT 
    DISTINCT c.id 
FROM 
    carpets AS c 
    INNER JOIN carpet_relations AS r1 ON c.id = r1.carpet_id 
    INNER JOIN carpet_relations AS r2 ON c.id = r2.carpet_id 
    INNER JOIN carpet_relations AS r3 ON c.id = r3.carpet_id 
WHERE 
    c.active = '1' 

    AND ((c.title LIKE '%north%') 
    OR (c.title LIKE '%tabriz%') 
    OR (c.item_no LIKE '%north%') 
    OR (c.item_no LIKE '%tabriz%') 
    OR (c.pattern LIKE '%north%') 
    OR (c.pattern LIKE '%tabriz%') 
    OR (c.period LIKE '%north%') 
    OR (c.period LIKE '%tabriz%') 
    OR (c.country LIKE '%north%') 
    OR (c.country LIKE '%tabriz%')) 

    AND (c.width_feet BETWEEN 0 AND 22) 
    AND (c.width_inches BETWEEN 0 AND 11) 
    AND (c.height_feet BETWEEN 0 AND 49) 
    AND (c.height_inches BETWEEN 0 AND 11) 
ORDER BY 
    c.item_no 

me cayó el "COMO '% norte tabriz% '' secciones porque eran redundantes, ya que si coincidía con "tabriz norte" solo, entonces "norte" y "tabriz" también serían ciertos.

Además, saqué las comillas simples que rodeaban los números en las cláusulas between.

No se pueden reproducir las tablas para probarlo ya que solo se muestra 1 tabla, pero espero que esto ayude.

0

Lo más probable es que no sea la consulta sino un error en su código PHP en alguna parte. ¿Puedes publicar tu código PHP para que lo echemos un vistazo?

3

Preste mucha atención a la forma de utilizar comillas en PHP también. Para las consultas SQL con una cláusula where específicamente, puede ser un problema ya que la cláusula where necesita decir WHERE x = 'value' en Comillas simples. Por lo tanto, asegúrese de que su cadena SQL general use comillas dobles. Además, las variables de PHP en comillas simples no se evaluarán, por lo que si está basando una cláusula where en una variable de PHP, debe ajustar esa variable en Comillas simples antes de usarla en la declaración de SQL. Espero que todo eso tenga sentido, me quedé atascado en este tema durante 2 días cuando comencé a aprender PHP/MySQL.

1

tratar consultas simples primero (para conexión de prueba) si no trabajan mirar en la base local, nombre de usuario, contraseña (que podría ser erróneamente entrada)

vez que esté seguro de la conexión db, trate de usar la consulta de múltiples función en php, quitar separación innecesaria, ejecutar la consulta en un bucle for o múltiples pasos

espero que esta ayuda

0

a veces tengo este problema, ocurre sólo cuando hay algún problema con las conexiones o o su consulta. Por favor, imprima su consulta y vea cómo se imprime. En la consulta debe estar usando $var.

0

Trate de manejar ("") correctamente en su código php. Si su consulta funciona bien en phpMyAdmin, entonces debería funcionar también en su código php. O puede haber algún error en la conexión de su base de datos. Asegúrese de seleccionar la base de datos correcta de su tabla deseada.

Cuestiones relacionadas