Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我的sql命令有什么错误?_Mysql - Fatal编程技术网

Mysql 我的sql命令有什么错误?

Mysql 我的sql命令有什么错误?,mysql,Mysql,匹配的产品名称为:$products\U name $query=选择p.products\U id、pd.products\U名称、p.products\U价格 从…起表2.1.1产品。P 表2产品描述。pd 其中p.products\u status=1 p.products\u id=pd.products\u id 和pd.language_id='。int$\会话['languages\u id']。' 和p.products\U id:p.products\U id 并将“产品名称”

匹配的产品名称为:$products\U name

$query=选择p.products\U id、pd.products\U名称、p.products\U价格 从…起表2.1.1产品。P 表2产品描述。pd 其中p.products\u status=1 p.products\u id=pd.products\u id 和pd.language_id='。int$\会话['languages\u id']。' 和p.products\U id:p.products\U id 并将“产品名称”与以下内容匹配:自然语言模式下的产品名称

1、为什么使用p,而不是p

我的IDE显示该命令的警报。我不知道如何纠正它

运行查询时,将显示以下错误:


您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第6行使用“p.products\u id”并将“products\u name”与“products\u name IN NATURAL LAN”匹配

附言:


我想显示产品下的相关项目。根据产品名称的某些部分匹配,您向数据库发送的最终查询是:

select p.products_id, pd.products_name, p.products_price from table1 p, table2 pd
where p.products_status = 1
and p.products_id = pd.products_id
and pd.language_id = 'lang'
and p.products_id <> :product_id AND MATCH('products_name') AGAINST (:products_name IN NATURAL LANGUAGE MODE);
这是错误的

最接近mysql的查询是:

select p.products_id, pd.product_name, p.products_price from table1 p, table2 pd 
where p.products_status = 1 and p.products_id = pd.products_id 
and pd.language_id = 'lang' and p.products_id <> pd.products_id 
AND MATCH(products_name) AGAINST ('product_name' IN NATURAL LANGUAGE MODE);
但我不确定这是否是你想要的


必须使用,以分隔from子句中的两个表。

匹配应为列。不能将引号放在内部,因为它们被视为字符串

改为使用`或不使用

MATCH(products_name)
MATCH(`products_name`)
匹配部分中存在语法错误。 列名不应使用单引号',而应使用反引号'。 然而,这只适用于保留字等

其他问题 您正在使用隐式联接语法。这是一个坏主意,最好使用显式连接

如果您使用的是PDO,那么不要在其中注入$vars,而是对所有内容都使用PDO,它更干净,执行速度更快,并且您不会犯SQL注入错误

根据你的问题:

1、为什么使用p,而不是p

语法是两个表的隐式交叉联接,您可以将其转换为where子句中的内部联接:。。。p.products\u id=pd.products\u id。。。。 这是SQL'89语法,早就被更干净的SQL'92语法改进了。
最好使用显式内部联接

你有什么错误?您是否可以打印$query以便我们查看其中的内容?您的SQL语法中有一个错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第6行使用near':p.products\u id并将“products\u name”与“products\u name IN NATURAL LAN”匹配。您如何执行此查询?Is:p.products\U id被替换为值?Konerak,我想显示产品下的相关项。根据产品名称的某些部分匹配的是您的代码,我没有更改任何内容。。。这就是te DB接收您的查询的方式。显然,表名是我发明的。这是不可能的我的代码可以工作。。。您希望通过查询获得什么?您不能在匹配中使用单引号-这是预期的columns@Johan什么不起作用?我没有提供任何代码作为解决方案,我只是打印了发送到数据库的查询,以澄清,是强制性的,因此不是问题。
MATCH(products_name)
MATCH(`products_name`)
 SELECT p.products_id, pd.products_name, p.products_price
 FROM TABLE_PRODUCTS p
 INNER JOIN TABLE_PRODUCTS_DESCRIPTION pd ON (p.products_id = pd.products_id)
 WHERE p.products_status = 1
   AND pd.language_id = :lang_id   
   AND p.products_id <> :p.products_id 
   AND MATCH(products_name) AGAINST (:products_name IN NATURAL LANGUAGE MODE)
   --        ^^^^^^^^^^^^^ A         ^^^^^^^^^^^^^^ B
   --  A = column, don't quote  B = value, can be quoted.