问号在 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 查询中代表啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#变量定义中含问号代表啥

这些代码中的问号是啥意思? [复制]

C#中的双问号有啥作用? [复制]

Ruby问号运算符,这是啥意思? [复制]

chrome方框问号是啥

Java泛型的类型参数中的问号是啥意思? [复制]