2011-12-16 156 views
8

任何想法都可以帮助,我已经在这里一段时间了,只是无法弄清楚什么是错的。MySQL查询在phpmyadmin中可用,但不能通过php

问题:查询工作正常,直到我在多个单词搜索中添加,您可以在下面看到粗体字。然而,我回应了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 
+0

在您的上下文中是否还有其他更简单的陈述? (如SELECT * FROM地毯) – djot 2011-12-16 15:53:53

回答

1

结果试试这个:

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“%大不里士% '“部分,因为它们是多余的,因为如果它与”北大不列颠“单独匹配,那么”北部“和”大巴“也是如此。

另外,我用单引号将两个子句之间的数字包围起来。

无法复制表来测试它,因为你只有1个表显示,但希望这有助于。

0

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

3

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

1

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

一旦确认数据库连接的,请尝试使用多查询在PHP函数,去除不必要的间距,运行在一个查询for循环或多个步骤

希望这有助于

0

有时我得到这个问题,它发生时,才会有与连接或或查询任何问题。请打印您的查询并查看它如何打印。在查询中您必须使用$var

0

尝试在你的php代码中正确处理(“”)。如果你的查询在phpMyAdmin中工作正常,那么它应该在你的php代码中工作。或者你的数据库连接可能有一些错误。确保你正在选择你想要的表的正确数据库。

相关问题