MySQL-запрос работает в phpmyadmin, но не через php - PullRequest
8 голосов
/ 16 декабря 2011

Любые идеи помогли бы, я был на этом некоторое время и просто не могу понять, что не так.

Проблема: запрос работает нормально, пока я не добавил поиск по нескольким словам, который вы можете увидеть ниже. Тем не менее, я повторил запрос sql, а затем вставил в phpmyadmin, и он работал отлично, но через php это приводит к 0 записям. Это не имеет никакого смысла, и я не могу понять, что может быть причиной результата 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

Ответы [ 6 ]

3 голосов
/ 04 января 2012

Обратите особое внимание на то, как вы используете кавычки и в PHP.Для SQL-запросов с определенным предложением where это может быть проблемой, поскольку в предложении where необходимо указать WHERE x = 'value' в одинарных кавычках.Поэтому убедитесь, что ваша общая строка SQL использует двойные кавычки.Кроме того, переменные PHP в одинарных кавычках не будут оцениваться, поэтому, если вы базируете предложение where на переменной PHP, вам нужно заключить эту переменную в одинарные кавычки, прежде чем использовать ее в выражении SQL.Надеюсь, все это имело смысл, я застрял в этой проблеме на 2 дня, когда начал изучать PHP / MySQL.

2 голосов
/ 17 декабря 2011

Попробуйте это:

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

Я удалил разделы "LIKE '% north tabriz%'", потому что они были избыточными, поскольку, если он соответствует только "северному табризу", то "северу" и "табризу""также было бы верно.

Кроме того, я убрал одинарные кавычки, которые окружали числа в предложениях между ними.

Невозможно воспроизвести таблицы для проверки, так как у вас есть только 1Таблица показана, но надеюсь, что это поможет.

1 голос
/ 02 февраля 2012

сначала попробуйте простые запросы (для проверки соединения), если они не работают, посмотрите хост базы данных, имя пользователя, пароль (они могут быть введены неверно)

Как только вы уверены в подключении к БД, попробуйте использовать несколько запросовфункция в php, удаление ненужных интервалов, выполнение запроса в цикле for или нескольких шагах

надеюсь, это поможет

0 голосов
/ 29 февраля 2012

Попробуйте правильно обработать ("") в своем php-коде.Если ваш запрос работает нормально в phpMyAdmin, то он должен работать и в вашем php-коде.Или может быть какая-то ошибка в соединении с вашей базой данных.Убедитесь, что вы выбираете правильную базу данных желаемой таблицы.

0 голосов
/ 15 февраля 2012

Иногда я получаю эту проблему, это происходит только тогда, когда есть какие-либо проблемы с соединениями или или ваш запрос. Пожалуйста, напечатайте ваш запрос и посмотрите, как он печатается. В запросе вы должны использовать $var.

0 голосов
/ 21 декабря 2011

Скорее всего, это не запрос, а ошибка в вашем PHP-коде. Можете ли вы опубликовать свой PHP-код, чтобы мы могли на него взглянуть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...