任何想法都会有所帮助,我现在已经有一段时间了,只是无法弄清楚出了什么问题。
问题:查询工作正常,直到我添加了多字搜索,您可以在下面看到粗体。但是,我回应了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 :(得分: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代码中使用。或者数据库连接可能存在一些错误。确保您选择了所需表格的正确数据库。