Mysql 如何使用本机sql prepared语句准备列名
出于测试目的,我需要一个本机SQL prepared语句,它在列上进行准备Mysql 如何使用本机sql prepared语句准备列名,mysql,sql,mariadb,Mysql,Sql,Mariadb,出于测试目的,我需要一个本机SQL prepared语句,它在列上进行准备 PREPARE stmt FROM 'SELECT * FROM `information_schema`.`TABLES` where ? > 10000'; SET @a = AVG_ROW_LENGTH; Execute stmt using @a; 这不起作用,因为“字段列表”中的#1054-未知列“平均行长” (相同,如果我在名字周围加上`) 错误似乎不合法,因为下面返回了一个结果 PREPARE s
PREPARE stmt FROM 'SELECT * FROM `information_schema`.`TABLES` where ? > 10000';
SET @a = AVG_ROW_LENGTH;
Execute stmt using @a;
这不起作用,因为“字段列表”中的#1054-未知列“平均行长”
(相同,如果我在名字周围加上`)
错误似乎不合法,因为下面返回了一个结果
PREPARE stmt FROM 'SELECT * FROM `information_schema`.`TABLES` where AVG_ROW_LENGTH > ?';
SET @a = 10000;
Execute stmt using @a;
你知道是有一种特殊的语法,还是根本不起作用?谢谢强> 版本信息:
Server: Localhost via UNIX socket
Server type: MariaDB
Server connection: SSL is not being used Documentation
Server version: 10.1.47-MariaDB-0+deb9u1 - Debian 9.13
Protocol version: 10
User: root@localhost
Server charset: UTF-8 Unicode (utf8mb4)
您可以使用下一种方法:
SET @condition = 'AVG_ROW_LENGTH';
SET @value = 10000;
PREPARE stmt FROM CONCAT('SELECT * FROM `information_schema`.`TABLES` where ', @condition , ' > ?');
Execute stmt using @value;
您还可以使用EXECUTE IMMEDIATE语句:
EXECUTE IMMEDIATE CONCAT('SELECT * FROM `information_schema`.`TABLES` where ', @condition , ' > ?') USING @value;
在上进行测试您不能对列名使用参数,只能对值使用参数。在准备之前先构建SQL字符串。这是一个动态查询,如果可以在DB端完成,会很酷,谢谢您提供的信息!