Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 prepared语句准备列名_Mysql_Sql_Mariadb - Fatal编程技术网

Mysql 如何使用本机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

出于测试目的,我需要一个本机SQL prepared语句,它在列上进行准备

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端完成,会很酷,谢谢您提供的信息!