我正在vb.net上的一个数据库中工作,sqlite主持一个画廊,我想扩大搜索范围。
这是实际的查询字符串:
"SELECT images.*
FROM images
JOIN nodes
ON images.id = nodes.image_id
WHERE tag_id = (SELECT tags.id
FROM tags
WHERE tag = '" & tagname & "')
ORDER BY images." & sort & " " & order & ""
但它只能搜索一个描述性标记(标记名)并对图像进行排序而已。
我想过滤图像ext(table = images.ext)或一个或多个参数的结果......例如:
如果用户搜索“cars ext:jpg width> 500”,数据库将返回所有标记为“cars”的图像,其扩展名为jpg且宽度大于500 px。
请帮助D =
答案 0 :(得分:1)
首先,这段代码很危险。它对SQL Injection攻击持开放态度。您不应该只是将类似的字符串值附加到查询字符串。相反,您应该使用参数化查询。
关于您的具体问题,您应该检查搜索的输入,并根据输入生成查询的特定部分,并在必要时对其进行参数化。
例如,如果必须对扩展进行过滤,则在包含join子句的变量中向扩展表添加连接,并在包含where子句的变量中对连接表进行过滤(同样作为适当的参数和参数值)。
然后,最后,您将查询的各个部分(以及查询参数)连接在一起并执行它。
答案 1 :(得分:0)
如果我正确理解了这个问题,你只想建立一个查询字符串。你尝试过这样的事吗?
SQLcommand.CommandText =“SELECT images。* FROM images JOIN nodes ON images.id = nodes.image_id WHERE tag_id =(SELECT tags.id FROM tags WHERE tag ='”& tagname&“')AND images。 Ext ='“&分机和“'和宽度>”&宽度和宽度“订购图像。” &安培;排序& “”&订单和“”
答案 2 :(得分:0)
首先,如果该输入来自用户,请不要连接这样的字符串,因为SQL Injection
可以成功使用SQL参数是一种避免注入的方法:
command.CommandText = "SELECT images.* " &_
"FROM images " &_
"JOIN nodes " &_
"ON images.id = nodes.image_id " &_
"WHERE tag_id = (SELECT tags.id " &_
"FROM tags " &_
"WHERE tag = @tag)"
您可以将其扩展为:
command.CommandText = "SELECT images.* " &_
"FROM images " &_
"JOIN nodes " &_
"ON images.id = nodes.image_id " &_
"WHERE tag_id = (SELECT tags.id " &_
"FROM tags " &_
"WHERE tag = @tag)"
command.Parameters.AddWithValue("@tag", searchTag)
If Not String.IsNullOrEmpty(searchExt) Then
command.CommandText = command.CommandText & " AND images.ext = @imageExt"
command.Parameters.AddWithValue("@imageExt", searchExt)
EndIf
If Not String.IsNullOrEmpty(searchWidth) Then
command.CommandText = command.CommandText & " AND images.width > @imageWidth"
command.Parameters.AddWithValue("@imageWidth", searchWidth)
EndIf
答案 3 :(得分:-2)
单独构建WHERE子句并将其添加到查询中。
where="1"
if tagname<>"" then where=where & " AND tag='" & tagname & "'"
...
"SELECT images.*
FROM images
JOIN nodes
ON images.id = nodes.image_id
WHERE tag_id = (SELECT tags.id
FROM tags
WHERE " & where & " )
ORDER BY images." & sort & " " & order & ""