当前位置:首页 > 网站建设 > php教程 > 正文内容

sql where 1=1和0=1的作用和缺点

热淘网7年前 (2014-08-06)php教程1402

where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句。

一、不用where  1=1  在多条件查询中的困扰

举个例子,如果您做查询页面,并且,可查询的选项有多个,同时,还让用户自行选择并输入查询关键词,那么,按平时的查询语句的动态构造,代码大体如下:

string MySqlStr=”select * from table where”;

if(Age.Text.Lenght>0)
{
MySqlStr=MySqlStr+“Age=“+“'Age.Text'“;
}

if(Address.Text.Lenght>0)
{
MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“;
}

①种假设

如果上述的两个IF判断语句,均为True,即用户都输入了查询词,那么,最终的MySqlStr动态构造语句变为:

MySqlStr=”select * from table where Age='18'  and Address='云南省文山州广南县小波吗村'”

可以看得出来,这是一条完整的正确的SQL查询语句,能够正确的被执行,并根据数据库是否存在记录,返回数据。

②种假设

如果上述的两个IF判断语句不成立,那么,最终的MySqlStr动态构造语句变为:

MySqlStr=”select * from table where“

现在,我们来看一下这条语句,由于where关键词后面需要使用条件,但是这条语句根本就不存在条件,所以,该语句就是一条错误的语句,肯定不能被执行,不仅报错,同时还不会查询到任何数据。

上述的两种假设,代表了现实的应用,说明,语句的构造存在问题,不足以应付灵活多变的查询条件。

二、使用 where  1=1  的好处

假如我们将上述的语句改为:

string MySqlStr=”select * from table where  1=1 ”;

if(Age.Text.Lenght>0)
{
MySqlStr=MySqlStr+“and Age=“+“'Age.Text'“;
}

if(Address.Text.Lenght>0)
{
MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“;
}

现在,也存在两种假设

①种假设

如果两个IF都成立,那么,语句变为:

MySqlStr=”select * from table where  1=1 and Age='18'  and Address='云南省文山州广南县小波吗村'”,很明显,该语句是一条正确的语句,能够正确执行,如果数据库有记录,肯定会被查询到。

②种假设

如果两个IF都不成立,那么,语句变为:

MySqlStr=”select * from table where 1=1”,现在,我们来看这条语句,由于where 1=1 是为True的语句,因此,该条语句语法正确,能够被正确执行,它的作用相当于:MySqlStr=”select * from table”,即返回表中所有数据。

言下之意就是:如果用户在多条件查询页面中,不选择任何字段、不输入任何关键词,那么,必将返回表中所有数据;如果用户在页面中,选择了部分字段并且输入了部分查询关键词,那么,就按用户设置的条件进行查询。

说到这里,不知道您是否已明白,其实,where 1=1的应用,不是什么高级的应用,也不是所谓的智能化的构造,仅仅只是为了满足多条件查询页面中不确定的各种因素而采用的一种构造一条正确能运行的动态SQL语句的一种方法。

where 1=0; 这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表

"SELECT * FROM strName WHERE 1 = 0"; 该select语句主要用于读取表的结构而不考虑表中的数据,这样节省了内存,因为可以不用保存结果集。  

create table newtable as select * from oldtable where 1=0;  创建一个新表,而新表的结构与查询的表的结构是一样的。

缺点:

如果是大数据表,加了这个1=1效率会很低,不要随便乱用,随便弄一个拼接函数就可以了;1=0那个倒是可以用以建表。

其实很简单加一个方法就OK ,先声明一个bool 在每一个if中都先进行判断是否需要where ,方法的功能大致如下 如果为false 就不加where 而true 的话就加个where;

where 1=1 数据库会被迫全表扫描,大数据量时拉低性能

如果你的选择条件中有索引,1=1会让所有的索引无效,所以不建议使用这样的方法。



<p>扫描二维码推送至手机访问。</p><p>版权声明:本文由<strong>网站标题</strong>发布,如需转载请注明出处。</p>

本文链接:https://www.retao5.com/jiaocheng/420.html

标签: sql优化
分享给朋友:

相关文章

php利用mkdir创建多级目录

php利用mkdir创建多级目录

先介绍一下 mkdir() 这个函数:mkdir($path,0777,true);第一个参数:必须,代表要创建的多级目录的路径;第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权;...

PHP strrchr() 函数

PHP strrchr() 函数

实例搜索 "Shanghai" 在字符串中的位置,并返回从该位置到字符串结尾的所有字符:<?php echo strrchr("I love&...

php100全部视频下载(1-107)附带全部解压密码|打包下载

php100全部视频下载(1-107)附带全部解压密码|打包下载

原始地址列表整理:http://wt6.php100.com/php100-1.rarhttp://wt6.php100.com/php100-2.rarhttp://wt6.php100.com/p...

PHP截取邮箱的后缀例子

PHP截取邮箱的后缀例子

使用 explode 函数,参考 <?php $email = 'service@jienews.com'; $result = explode('@', $email); echo $...

 PHP操作Session和Cookie

PHP操作Session和Cookie

我们跟踪用户信息时需要用到Session和Cookie,比如用户登录验证、记录用户浏览历史,存储购物车数据,限制用户会话有效时间等。今天我们来了解下PHP是如何操作Session和Cookie的。&n...

PHP使用正则表达式清除超链接文本

PHP使用正则表达式清除超链接文本

有些时候,我们需要对一些html文本进行处理,比如需要将文本中的超链接内容去除,这个时候就需要用到正则表达式可以用$str = preg_replace("/<a[^>]*hre...

评论列表

葫芦岛网站建设
5年前 (2017-04-11)

这个好,我正需要,支持下!

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。