我在一些ASP代码中看到了这一点并且没有理解最后一行,特别是Name =和AND之间的所有叛逆和引号。什么是追加?为什么我们需要两者?
uName = getRequestString("UserName");
uPass = getRequestString("UserPass");
sql = "SELECT * FROM Users WHERE Name ='" + uName + "' AND Pass ='" + uPass + "'"
答案 0 :(得分:2)
代码正在构建一个如下所示的查询:
SELECT * FROM Users WHERE Name = 'foo' AND Pass = 'bar'
它将uName
和uPass
变量中的文本传递到查询字符串中。
这是非常危险的 - 它是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
示例后的一个结束撇号。