我正在使用此SQL语句来获取行:
SELECT firstname, lastname
FROM myTable
WHERE ((lastname LIKE '" + parameter + "%')
parameter
从文本框中获取值。文本框的默认值为" "
我的问题是,当文本框中没有输入任何内容时,我将获取所有行。我试着用
WHERE lastname =
这只是给了我所有" "
获取排除数据库中空白的数据的正确方法是什么?当空白或“”作为参数传递时,也不会给出任何记录
答案 0 :(得分:2)
您正在使用wilcard,因此对于空白搜索字符串,您最终会使用
... WHERE lastname LIKE '%'
将匹配所有内容。如果没有在搜索表单中输入任何内容,您只需在脚本级别检测到该内容并且不运行查询,例如:在php-ish术语中:
if (strlen($_GET['keywords']) == 0) {
die("No search terms entered");
}
答案 1 :(得分:1)
SELECT firstname, lastname
FROM myTable
WHERE lastname LIKE '" + parameter + "%'
AND NULLIF(lastname,'') IS NOT NULL
AND '" + parameter + "' <> ''
很简单,只返回lastname以'parameter'开头的记录,并且只返回'parameter'不是空字符串的记录。
编辑:添加了代码,表明它永远不会返回带有空白姓氏的记录。
答案 2 :(得分:1)
首先,我希望你做一些消毒以避免sql注入。
然后你可以选择:
SELECT firstname, lastname FORM myTable WHERE ((lastname LIKE '" + parameter + "%') AND ''<>'" + parameter + "'"
第二个是从表现点开始的不良做法,它会假设你放弃了消毒(非常糟糕)
另外,您应该注意,在您的清理过程中,您必须转义或删除特殊字符_和%,请参阅 http://msdn.microsoft.com/en-us/library/ms179859(v=sql.105).aspx
我不处理这个问题,一个等于%的非空参数将导致like '%%'
,相当于like '%'
答案 3 :(得分:0)
您可以在代码中测试参数变量的string.IsNullOrEmpty,这样您甚至不需要进行数据库调用。
在我看来,这是最有效的事情。