gpt4 book ai didi

mysql - 有没有办法使用准备好的语句来选择变量列?

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:01 24 4
gpt4 key购买 nike

以下代码使用准备好的语句,似乎无法选择表 studentshome_address:

SET @mycolumn = 'home_address' ;
SET @s = 'SELECT ? FROM students' ;
PREPARE statement FROM @s;
EXECUTE statement USING @mycolumn ;

事实上,这些指令将简单地返回一个名为“?”的列,其中填充了字符串“home_address”,并且包含与表 students 一样多的行。

我怎样才能使这项工作?我知道这种语法是可行的,因为以下示例(取自 Is it possible to execute a string in MySQL?)有效:

SET @username = 'test';
SET @password = 'asdf';
SET @Expression = 'SELECT id FROM Users WHERE name = ? AND pass = ?;' ;
PREPARE myquery FROM @Expression;
EXECUTE myquery USING @username, @password;

最佳答案

这是不可能的。不同之处在于您动态引用数据库的对象,而不是仅仅传递一个字符串。

准备好的语句通过使用您传入的字符串/值的占位符完整指定 SQL 语句来工作。然后,您的 RDBMS 可以解析查询并在您传入参数之前确定它的完整执行路径。一旦该步骤完成,它就会接收参数并获取数据。这就是准备好的语句如此安全的原因。执行路径是预先确定的,所以不可能传入更多 SQL 并更改它。

所以如果你不知道列或表,那么它就无法解析和构建执行路径。相反,您必须通过串联动态构建 SQL 并执行。如果您从用户输入中获取列名或表名,那么您必须尽可能地对其进行清理,并祈祷您的清理工作比您偷偷摸摸的用户注入(inject) sql 的能力更好。

关于mysql - 有没有办法使用准备好的语句来选择变量列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48192468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com