我正在使用coldfusion应用程序并使用IIS URL重写。网址重写将我的网址http://www.test.com/viewcategory/1重写为http://www.test.com/viewcategory.cfm?category=1。它运作良好,并打开具有categoryid类别详细信息的网页。
我再次将我的网址http://www.test.com/viewcategory/categoryname重写为http://www.test.com/viewcategory.cfm?category=categoryname,我想根据categoryname 打开类别详情页面,但不想更改我的代码即获取详细信息在categoryid的基础上。在coldfusion中是否有任何方法可以在categoryname的基础上获取内部类别的id,并使用上面的http://www.test.com/viewcategory.cfm?category=categoryname显示页面。
谢谢,
阿伦
答案 0 :(得分:-1)
<cfquery name="getCat" datasource="#request.dsn#">
select * from Categories
where CategoryName=<cfqueryparam value="#url.category#" cfsqltype="CF_SQL_VARCHAR">
</cfquery>
正如其中一条评论所指出的,你需要确保类别名称是唯一的,或者你可以像某些网站那样做,并包括像viewcategory / Apples / 1,viewcategory / Bananas / 2等数字,然后你可以重写要传递ID,或者使用当前的方案,您可以使用像Bananas_1,Apples_2这样的网址,然后:
<cfset url.cID = val(listlast(url.category,"_"))>
<cfquery name="getCat" datasource="#request.dsn#">
select * from Categories
where CategoryID=<cfqueryparam value="#url.cid#" cfsqltype="CF_SQL_INTEGER">
</cfquery>
编辑:此外,您可以这样做以防止错误的网址具有不匹配的类别名称和数字ID(假设用户在复制网址时错过了最后一位数字),尽管这不是大多数网站关心的问题。
<cfset url.cID = val(listlast(url.category,"_"))>
<cfset url.category = listDeleteAt(url.category,listlen(url.category,"_"),"_")>
<!--- I chose not to use listfirst above in case your category name includes underscores --->
<cfquery name="getCat" datasource="#request.dsn#">
select * from Categories
where CategoryID=<cfqueryparam value="#url.cid#" cfsqltype="CF_SQL_INTEGER">
and CategoryName=<cfqueryparam value="#url.category#" cfsqltype="CF_SQL_VARCHAR">
</cfquery>
编辑:对正确的字段名称和表名进行微小更改后,这些查询将起作用,但作为对我的答案的评论指出,您应该列出要检索的列而不是使用*。默认使用*是一个坏习惯。