第十一章:第3节 PHP与MySQL——写一个操作mysql的类库(二)实现查询功能

更新于:2018-03-21 13:28:58

在上节代码的基础上我们继续拓展功能,这节开始写查询功能。


先说说一个基本查询都有哪几个部分组成了?


select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句];


大体上一个基本查询有“表名”、“表字段”、“where子句”、“group by 子句”、“having子句”、“order by子句”、“limit子句”这几部分组成。我们准备这样设计,每一部分在类里都写一个方法专门做设置。看代码:


1.png


先设置两个私有属性,$_options数组用来存组成一条完整的SQL语句的各个部分,$_sql存一条完整的SQL语句。


1.png


把原先的getNew方法重新命名table,为$_options数组添加表名数据。30行是挺重要的一行代码,可防止上一条SQL语句的参数影响到下一条SQL语句。


1.png

1.png


各个部分的方法都已写好,开始写一个方法把$_options各项组成一条完整的SQL语句:


1.png


再写一个可以执行select语句的方法:


1.png


说明下:


130行执行了PDO对象的prepare方法,这个方法返回了另一个对象——PDOStatement对象


1.png


PDOStatement对象方法有:


1.png


131行execute方法执行一条SQL语句

132行 fetchall方法可以把结果集赋予一变量。它的参数可以指定返回结果集的形式,这里我们使用的最常用的“PDO::FETCH_ASSOC”,你也可以查手册或搜索都有哪些其他参数值。


最后我们再写一个方法:


1.png


139行合成一条SQL语句,140行执行这条SQL语句。


我们来测试下代码看看能不能查询出数据:


1.png

1.png


看来是没有问题了。


细节:


在mysql中,id字段是int类型,user_name字段是varchar类型,而通过PDO取得的结果集,所有的数据都是字符串类型。


这也是因为字符串类型是最安全的数据类型。假如mysql是64位,PHP是32位,按照原类型直接获取,就会报错。mysql bigint类型被PHP强制按照int类型获取,操作位数不够,获取的数值肯定是错误的。


如果觉着这样写反而不方便了,也可以使用Db类的query方法直接输入原生的SQL语句。


1.png


1.png


本节学习代码》》》