gpt4 book ai didi

sql - 问号在 SQL 查询中代表什么?

转载 作者:行者123 更新时间:2023-12-04 13:12:00 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is the question mark's significance in MySQL at “WHERE column = ?”?

(4 个回答)


7年前关闭。




在阅读一些 SQL 书籍时,我发现示例倾向于在查询中使用问号 ( ? )。它代表什么?

最佳答案

您看到的是 参数化查询 .从程序执行动态 SQL 时经常使用它们。

例如,而不是写这个(注意:伪代码):

ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = 7")
result = cmd.Execute()

你这样写:
ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?")
cmd.Parameters.Add(7)
result = cmd.Execute()

这有许多优点,这可能是显而易见的。最重要的一个:解析参数的库函数很聪明,并确保字符串被正确转义。例如,如果你这样写:
string s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"
cmd.Execute()

当用户输入时会发生什么?
Robert'); DROP TABLE students; --

(答案是 here )

改写这个:
s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE name = ?"
cmd.Parameters.Add(s)
cmd.Execute()

然后库将清理输入,产生这个:
"SELECT * FROM students where name = 'Robert''); DROP TABLE students; --'"

并非所有 DBMS 都使用 ? . MS SQL 使用命名参数,我认为这是 巨大的改进:
cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()

关于sql - 问号在 SQL 查询中代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3727688/

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