问号在 SQL 查询中代表啥? [复制]
Posted
技术标签:
【中文标题】问号在 SQL 查询中代表啥? [复制]【英文标题】:What does a question mark represent in SQL queries? [duplicate]问号在 SQL 查询中代表什么? [复制] 【发布时间】:2010-09-16 14:31:46 【问题描述】:在浏览一些 SQL 书籍时,我发现示例在查询中倾向于使用问号 (?
)。它代表什么?
【问题讨论】:
能否提供查询代码? 我猜这是准备好的语句中的变量,但您应该发布该特定查询以确保。 【参考方案1】:您看到的是参数化查询。从程序执行动态 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 使用 named 参数,我认为这是一个巨大的改进:
cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()
【讨论】:
【参考方案2】:?
是一个未命名的参数,可以由运行查询的程序填写,以避免SQL injection。
【讨论】:
你能举个例子吗?【参考方案3】:?
是允许参数化查询。这些参数化查询是为了在用它们各自的值替换?
时允许特定类型的值。
就是这样。
这里有一个reason 说明为什么最好使用参数化查询。基本上,它更易于阅读和调试。
【讨论】:
【参考方案4】:这是一个参数。执行查询时可以指定。
【讨论】:
【参考方案5】:我认为这在 SQL 中没有任何意义。您可能正在查看 JDBC 中的 Prepared Statements 或其他内容。在这种情况下,问号是语句参数的占位符。
【讨论】:
【参考方案6】:它通常表示由客户端提供的参数。
【讨论】:
以上是关于问号在 SQL 查询中代表啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章