MySQL查询在phpmyadmin中工作,但不能通过php

时间:2011-12-16 15:50:30

标签: php mysql phpmyadmin

任何想法都会有所帮助,我现在已经有一段时间了,只是无法弄清楚出了什么问题。

问题:查询工作正常,直到我添加了多字搜索,您可以在下面看到粗体。但是,我回应了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 个答案:

答案 0 :(得分:3)

密切关注如何在PHP中使用引号。对于具有where子句的SQL查询,特别是它可能是一个问题,因为where子句需要在单引号中说WHERE x ='value'。因此,请确保您的整个SQL字符串使用双引号。此外,单引号中的PHP变量将不会被评估,因此如果您在PHP变量上使用where子句,则需要在SQL语句中使用该变量之前将该变量包装在单引号中。我希望所有这些都是有道理的,当我开始学习PHP / MySQL时,我在这个问题上陷入困境2天。

答案 1 :(得分:2)

试试这个:

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%'”部分因为它们是多余的,因为如果它单独匹配“north tabriz”,那么“north”和“tabriz”也是如此。

另外,我把单引号括在了条款中的数字。

无法重现表格进行测试,因为您只显示了1个表格,但希望这会有所帮助。

答案 2 :(得分:1)

首先尝试简单查询(测试连接) 如果他们不工作,请查看数据库主机,用户名,密码(可能输入错误)

一旦你确定数据库连接,尝试在php中使用多查询功能,删除不必要的间距,在for循环或多个步骤中运行查询

希望这会有所帮助

答案 3 :(得分:0)

这很可能不是查询,而是PHP代码中的某个错误。你能发贴PHP代码给我们看看吗?

答案 4 :(得分:0)

有时我遇到此问题,只有在连接或查询出现问题时才会发生此问题。请打印您的查询,看看它是如何打印的。在查询中,您必须使用$var

答案 5 :(得分:0)

尝试在PHP代码中正确处理(“”)。如果您的查询在phpMyAdmin中正常工作,那么它也应该在您的PHP代码中使用。或者数据库连接可能存在一些错误。确保您选择了所需表格的正确数据库。