有人可以澄清这个SQL命令

时间:2014-02-10 19:42:54

标签: sql

我在一些ASP代码中看到了这一点并且没有理解最后一行,特别是Name =和AND之间的所有叛逆和引号。什么是追加?为什么我们需要两者?

uName = getRequestString("UserName");
uPass = getRequestString("UserPass");

sql = "SELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'"

5 个答案:

答案 0 :(得分:2)

代码正在构建一个如下所示的查询:

SELECT * FROM Users WHERE Name = 'foo' AND Pass = 'bar'

它将uNameuPass变量中的文本传递到查询字符串中。

这是非常危险的 - 它是SQL Injection的开门。

答案 1 :(得分:1)

这很简单,你有一个带双引号的字符串句子的开头。双引号表示字符串的开头和结尾或部分。

例如,如果你有

sql ="SELECT * FROM USERS"

你的句子取得了所有的价值;如果你有:

sql = "SELCT * FROM USERS"
whereSentence = " WHERE id = 1"
wholeSql = sql + whereSentence

使用+(加号)表示您正在连接所有字符串。 使用简单引号,您可以在字符串中添加简单引号并连接句子的其他部分。

例如,如果

  

uName ='John'和uPass ='McDonals'

sql = "SELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'"

你的最后一句应该是

SELECT * FROM Users WHERE Name = 'John' And Pass = 'McDonals'.

这是一个简单的方式来表示名称是John McDonals为String,但参数是变量,具体取决于请求

答案 2 :(得分:0)

第一个引用(')标记位于SQL后面。第二个引号(")标记ASP的字符串文字。

解析后,查询将类似于:

SELECT * FROM Users WHERE Name ='name' AND Pass ='password'

这就是您需要'的原因,因为您的目的是为DBMS提供一个字符串。

答案 3 :(得分:0)

此代码正在为SQL请求构建完整的字符串。据推测,这是连接到一个网页,要求在一个块中提交用户名和密码。

uName和uPass字符串将设置为以下内容:

uName = "John";
uPass = "qwerty"; 

当创建sql字符串时,SQL查询需要在字符串值周围加上引号,因此最终查询将如下所示:

sql = "SELECT * FROM Users WHERE Name ='John' AND Pass ='qwerty'"

答案 4 :(得分:0)

如果你写了:

SELECT x from y where y.name = martin

你会收到错误。你需要撇号来表示一个字符串,如下所示:

SELECT x from y where y.name = 'martin'

引用是因为有人将一个变量附加到一个字符串,然后追加另一个字符串,该字符串的第一个字符撇号是我martin示例后的一个结束撇号。

但是,不要这样做,我的意思是不要将变量附加到字符串,除非你知道你在做什么。使用参数化查询。