Php 在mysql中追加以逗号分隔的字符串时出现语法错误

Php 在mysql中追加以逗号分隔的字符串时出现语法错误,php,mysql,sql,syntax-error,Php,Mysql,Sql,Syntax Error,我有以下疑问 SELECT diamondsList.*, dealers.* FROM diamondsList JOIN dealers ON diamondsList.dealerId = dealers.id WHERE price >= :minPrice AND price <= :maxPrice AND carat >= :minCarat AND carat <= :maxCarat AND clarity IN (SI2,VS1,SI1,VS2,VVS

我有以下疑问

SELECT diamondsList.*, dealers.* FROM diamondsList JOIN dealers ON diamondsList.dealerId = dealers.id WHERE price >= :minPrice AND price <= :maxPrice AND carat >= :minCarat AND carat <= :maxCarat AND clarity IN (SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL) AND color IN (J,H,D,E,F,G,I) AND diamondsType IN (BR,HS,CUS,RAD,AS,PRIN,OV,PS,MQ,EM)
“FL”附近有什么语法错误

不是那个问题

SELECT diamondsList.*, dealers.* FROM diamondsList JOIN dealers ON diamondsList.dealerId = dealers.id WHERE price >= :minPrice AND price <= :maxPrice AND carat >= :minCarat AND carat <= :maxCarat

选择diamondsList.*,dealers.*从diamondsList加入diamondsList.dealerId=dealers.id上的dealers,其中price>=:minPrice AND price=:minCarat AND carat您的字符串值必须在引号中:

IN (SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL)
应该是

IN ('SI2','VS1','SI1','VS2','VVS2','VVS1','IF','FL')
这适用于查询中的所有字符串(即检查其他in()语句)

我有一个字符串“SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL”,我该怎么做

如果您有CSV格式的值,则需要在其中进行搜索

更改:

clarity IN (SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL)
致:

同样的问题似乎也存在于您查询的其他部分。

您需要在这些零件上应用相同的
FIND_IN_SET

请使用下面的查询

SELECT diamondsList.*, dealers.* FROM diamondsList 
  JOIN dealers ON diamondsList.dealerId = dealers.id 
WHERE price >= :minPrice AND price <= :maxPrice 
  AND carat >= :minCarat AND carat <= :maxCarat 
  AND clarity IN ("SI2","VS1","SI1","VS2","VVS2","VVS1","IF","FL") 
  AND color IN ("J","H","D","E","F","G","I") 
  AND diamondsType IN ("BR","HS","CUS","RAD","AS","PRIN","OV","PS","MQ","EM")
从钻石列表中选择钻石列表。*,经销商。*
加入diamondsList.dealerId=deralers.id上的经销商

其中price>=:minPrice AND price=:minCarat AND carat=:minPrice AND price=:minCarat AND carat我有一个字符串“SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL”,我该怎么做见@Ravinder的答案。这是一个更合适的解决方案。具体错误是使用了保留字(IF)。您可能需要一个字符串('IF')。顺便说一句,如果“if”真的要在这个上下文中用作列标识符,那么您必须在它前面加上一个表标识符(my_table.if),或者用反勾(`if`)将它括起来。但是一个更好的办法是完全避免使用保留字!请注意,几乎总是会在错误消息中引用的文本部分的左侧立即找到错误。。
find_in_set( clarity, 'SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL' )
SELECT diamondsList.*, dealers.* FROM diamondsList 
  JOIN dealers ON diamondsList.dealerId = dealers.id 
WHERE price >= :minPrice AND price <= :maxPrice 
  AND carat >= :minCarat AND carat <= :maxCarat 
  AND clarity IN ("SI2","VS1","SI1","VS2","VVS2","VVS1","IF","FL") 
  AND color IN ("J","H","D","E","F","G","I") 
  AND diamondsType IN ("BR","HS","CUS","RAD","AS","PRIN","OV","PS","MQ","EM")
SELECT diamondsList.*, dealers.* FROM diamondsList 
  JOIN dealers ON diamondsList.dealerId = dealers.id 
WHERE price >= :minPrice AND price <= :maxPrice 
  AND carat >= :minCarat AND carat <= :maxCarat 
  AND clarity LIKE "SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL" 
  AND color IN ("J","H","D","E","F","G","I") 
  AND diamondsType IN ("BR","HS","CUS","RAD","AS","PRIN","OV","PS","MQ","EM")
SELECT diamondsList.*, dealers.* FROM diamondsList 
  JOIN dealers ON diamondsList.dealerId = dealers.id 
WHERE price >= :minPrice AND price <= :maxPrice 
  AND carat >= :minCarat AND carat <= :maxCarat 
  AND FIND_IN_SET(clarity,"SI2,VS1,SI1,VS2,VVS2,VVS1,IF,FL")  
  AND FIND_IN_SET(color,"J,H,D,E,F,G,I") 
  AND FIND_IN_SET(diamondsType,"BR,HS,CUS,RAD,AS,PRIN,OV,PS,MQ,EM")