MySQL查询在phpmyadmin中工作,但不通过php
任何想法都会有帮助,我在这方面已经有一段时间了,只是不知道是什么错了 问题:在我添加多词搜索之前,查询工作正常,您可以在下面看到加粗的多词搜索。然而,我回显了sql查询,然后粘贴到phpmyadmin中,它工作得很好,但通过php它得到的结果是0条记录。这没有任何意义,我也不知道是什么导致了0的结果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
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)如果同一个查询从不同的上下文返回不同的结果,我的第一个检查是我是否真的在同一个数据库上运行它?您是否尝试过匹配。。。反对你的质疑?