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

MySQL查询在phpmyadmin中工作,但不通过php,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,任何想法都会有帮助,我在这方面已经有一段时间了,只是不知道是什么错了 问题:在我添加多词搜索之前,查询工作正常,您可以在下面看到加粗的多词搜索。然而,我回显了sql查询,然后粘贴到phpmyadmin中,它工作得很好,但通过php它得到的结果是0条记录。这没有任何意义,我也不知道是什么导致了0的结果 SELECT DISTINCT c.id FROM carpets AS c INNER JOIN carpet_relations

任何想法都会有帮助,我在这方面已经有一段时间了,只是不知道是什么错了

问题:在我添加多词搜索之前,查询工作正常,您可以在下面看到加粗的多词搜索。然而,我回显了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
试试这个:

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个表,但希望这能有所帮助。

很可能不是查询,而是PHP代码中的某个错误。你能发布你的PHP代码让我们看一下吗?

请密切关注你如何在PHP中使用引号。对于带有where子句的SQL查询,这可能是一个问题,因为where子句需要在单引号中表示where x='value'。因此,请确保您的整个SQL字符串使用双引号。此外,不会对单引号中的PHP变量求值,因此,如果您将where子句基于PHP变量,则在SQL语句中使用该变量之前,需要将该变量用单引号括起来。我希望所有这些都是有意义的,当我开始学习PHP/MySQL时,我在这个问题上被困了两天。

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

确定数据库连接后,请尝试在php中使用multi-query函数,删除不必要的间距,在for循环或多个步骤中运行查询


希望这有帮助

有时我会遇到这个问题,只有当连接或您的查询出现问题时才会发生。请打印您的查询并查看其打印方式。在查询中,您必须使用
$var

尝试在php代码中正确处理(“”)。如果您的查询在phpMyAdmin中运行良好,那么它也应该在php代码中运行。或者您的数据库连接中可能存在错误。确保您选择了所需表的正确数据库。

在您的上下文中还有其他更简单的语句吗?(如从地毯上选择*)查看您的表架构和mysql中的错误会很有帮助。是的,如果删除了由**包围的区域,则在前端工作正常……但是,当我在前端添加这些部分时,它不起作用,在后端(phpmyadmin)如果同一个查询从不同的上下文返回不同的结果,我的第一个检查是我是否真的在同一个数据库上运行它?您是否尝试过匹配。。。反对你的质疑?