您的SQL语法有错误; 查看与MySQL对应的手册

Lui*_*cia 0 mysql mysql-error-1064

我试图运行一个mysql查询来查找文本的所有出现.我有语法错误,但不知道在哪里或如何解决它

我使用sqlyog来执行这个脚本

DECLARE @url VARCHAR(255)

SET @url = '1720'

SELECT 'select * from ' + RTRIM(tbl.name) + ' where ' + 
          RTRIM(col.name) + ' like %' + RTRIM(@url) + '%'
FROM sysobjects tbl
INNER JOIN syscolumns col ON tbl.id = col.id 
AND col.xtype IN (167, 175, 231, 239) -- (n)char and (n)varchar, there may be others to include
AND col.length > 30 -- arbitrary min length into which you might store a URL
WHERE tbl.type = 'U'    -- user defined table
Run Code Online (Sandbox Code Playgroud)

执行了1个查询,0个成功,1个错误,0个警告

查询:声明@url varchar(255)set @url ='1720'选择'select*from'+ rtrim(tbl.name)+'where'+ rtrim(col.name)+'like%'...

错误代码:1064您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'declare @url varchar(255)附近使用正确的语法

spe*_*593 6

对于MySQL改变这个:

DECLARE @url VARCHAR(255)
SET @url = '1720'
Run Code Online (Sandbox Code Playgroud)

至:

SET @url := '1720'
Run Code Online (Sandbox Code Playgroud)

在MySQL中,您没有DECLARE用户变量,只需将它们设置为值即可.等号适用于赋值,除了在SQL语句中,您需要使用Pascal样式:=作为赋值运算符.(我通常:=在SET语句的上下文中使用赋值运算符,即使在等号中也同样正常.)

但是,在查看SQL语句时,看起来这是Microsoft SQL Server语法,+连接运算符,sysobjects的引用,syscolumns.xtype.

这句话无法从MySQL返回任何有用的东西.

需要重写整个语句来查询:

information_schema.tables
information_schema.columns
Run Code Online (Sandbox Code Playgroud)

作为一个示例出发点:

SET @url := 'foobar';

SELECT CONCAT('select * from `',col.table_schema
             ,'`.`',col.table_name
             ,'` where `',col.column_name
             ,'` like ''%',RTRIM(@url),'%''') AS q
  FROM information_schema.columns col 
  JOIN information_schema.tables tbl
    ON tbl.table_schema = col.table_schema
   AND tbl.table_name = col.table_name
   AND tbl.table_type = 'BASE TABLE'
 WHERE col.data_type IN ('varchar','char')
   AND col.character_maximum_length >= 30
   AND col.table_schema = 'mydatabase';
Run Code Online (Sandbox Code Playgroud)

更新:

要在每个查询的结果集中包含"查询ID",以便您可以识别哪些查询返回一行...

SELECT CONCAT('select ',@rn := @rn + 1, ' as q, t.* from `',col.table_schema
             ,'`.`',col.table_name
             ,'` t where `',col.column_name
             ,'` like ''%',RTRIM(@url),'%''') AS q
  FROM (SELECT @rn := 0) r
  JOIN information_schema.columns col 
  JOIN information_schema.tables tbl
    ON tbl.table_schema = col.table_schema
   AND tbl.table_name = col.table_name
   AND tbl.table_type = 'BASE TABLE'
 WHERE col.data_type IN ('varchar','char')
   AND col.character_maximum_length >= 30
   AND col.table_schema = 'mydatabase';
Run Code Online (Sandbox Code Playgroud)