构建自己的PHP框架--实现Model类(2)
在上一篇博客中我们简单实现了findOne方法,但我们可以看到,还是有一些问题的,下面我们来修正一下这些问题。
首先是返回的数据中,数字被转换成了字符串。我们需要的是数字啊。。。
PDO中有属性可以支持,PDO::ATTR_STRINGIFY_FETCHES 和 PDO::ATTR_EMULATE_PREPARES 属性。
- PDO::ATTR_STRINGIFY_FETCHES: 提取的时候将数值转换为字符串。 需要 bool 类型。
- PDO::ATTR_EMULATE_PREPARES 启用或禁用预处理语句的模拟。 有些驱动不支持或有限度地支持本地预处理。使用此设置强制PDO总是模拟预处理语句(如果为 TRUE ),或试着使用本地预处理语句(如果为 FALSE)。如果驱动不能成功预处理当前查询,它将总是回到模拟预处理语句上。 需要 bool 类型。
将这两个参数设置为false,应该就可以使返回的数据中的数字保持数字格式了。
相关详情可查看PDO预定义常量和PDO::setAttribute
getDb方法修改为如下内容:
public static function getDb(){if (empty(static::$pdo)) {$host = 'localhost';$database = 'sf';$username = 'jun';$password = 'jun';$options = [PDO::ATTR_EMULATE_PREPARES => false,PDO::ATTR_STRINGIFY_FETCHES => false];static::$pdo = new PDO("mysql:host=$host;dbname=$database", $username, $password, $options);static::$pdo->exec("set names 'utf8'");}return static::$pdo;}
但是修改完,之后你可能发现,根本不起作用,那究竟是什么原因呢?其实是你用的是老的驱动php5-mysql,你应该换成php5-mysqlnd。执行如下代码更换驱动(Ubuntu环境下):
# Remove the old driver
sudo apt-get remove php5-mysql
# Install the new driver
sudo apt-get install php5-mysqlnd
关于这个问题的详情可点击此处查看
然后之前的代码里还有一个问题,当findOne的参数为空时,会挂掉。所以需要对$condition做一下判空。修正完之后的代码如下:
public static function findOne($condition = null){$sql = 'select * from ' . static::tableName();$params = [];// 判空if (!empty($condition)) {$sql .= ' where ';$params = array_values($condition);$keys = [];foreach ($condition as $key => $value) {array_push($keys, "$key = ?");}$sql .= implode(' and ', $keys);}$stmt = static::getDb()->prepare($sql);$rs = $stmt->execute($params);if ($rs) {$row = $stmt->fetch(PDO::FETCH_ASSOC);if (!empty($row)) {$model = new static();foreach ($row as $rowKey => $rowValue) {$model->$rowKey = $rowValue;}return $model;}}return null;}
好了,今天就先到这里。项目内容和博客内容也都会放到Github上,欢迎大家提建议。
code:https://github.com/CraryPrimitiveMan/simple-framework/tree/0.6
blog project:https://github.com/CraryPrimitiveMan/create-your-own-php-framework
转载于:https://www.cnblogs.com/CraryPrimitiveMan/p/5227244.html
构建自己的PHP框架--实现Model类(2)相关推荐
- tp框架之Model类与命名空间
1.获取系统常量信息 public function shuchu(){var_dump(get_defined_constants()); }2.跨控制器或跨模块调用 function diaoyo ...
- 知识图谱实战应用9-基于neo4j的知识图谱框架设计与类模型构建
大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用9-基于neo4j的知识图谱框架设计与类模型构建.我将构建KnowledgeGraphs的类,用于操作Neo4j图数据库中的知识图谱数据.方便管 ...
- 如何构建Android MVVM 应用框架
本文转载自[http://tech.meituan.com/android_mvvm.htmlhmsr=toutiao.io&utm_medium=toutiao.io&utm_sou ...
- 设计php框架_利用 Composer 一步一步构建自己的 PHP 框架(三)——设计 MVC
利用 Composer 一步一步构建自己的 PHP 框架(三)--设计 MVC 2014-10-14 / 阅读数:50438 / 分类: PHP 终于可以 "一次编写,到处发布" ...
- composer mysql_利用 Composer 一步一步构建自己的 PHP 框架(四)——使用 ORM
利用 Composer 一步一步构建自己的 PHP 框架(四)--使用 ORM 2014-10-16 / 阅读数:65457 / 分类: PHP 回顾 经过前三篇文章 基础准备 . 构建路由 和 设计 ...
- Vue.js构建用户界面的渐进式框架(前端学习笔记1.0)
文章目录 前言 一.Vue是什么? 二.前端核心分析 1.1.概述 1.2.前端三要素 1.3.结构层(HTML) 1.4.表现层(CSS) 1.5.行为层(JavaScript) 二.前端发展史 2 ...
- 构建Java并发模型框架
2002 年 2 月 22 日 Java的多线程特性为构建高性能的应用提供了极大的方便,但是也带来了不少的麻烦.线程间同步.数据一致性等烦琐的问题需要细心的考虑,一不小心就会出现一些微妙的,难以调试的 ...
- Mybatis Plus 2 升到 Mybatis Plus 3 时,实体继承的Model类的的相关问题...
一.更新依赖关系 当你把依赖从 <dependency><groupId>com.baomidou</groupId><artifactId>mybat ...
- tf.Keras.Model类总结
文章目录 tf.keras.Model类 1. 创建一个tf.keras.Model类实例的方法 1.1 通过指定输入输出进行实例化 1.2 通过继承Model类进行实例化 2. tf.Keras.M ...
- 【文献翻译】构建网络安全知识库的框架-A Framework to Construct Knowledge Base for Cyber Security
摘要--现在有一些针对不同方面的独立网络安全知识库.在互联网上,也有很多网络安全相关的内容以文字的形式存在.融合这些网络安全相关信息可以是一项有意义的工作.在本文中,我们提出了一个框架来整合现有的网络 ...
最新文章
- java final修饰符_java final修饰符详解,final修饰方法
- python进行linux编程,Python之函数进阶
- python 自定义函数和循环_Python循环语句——对for循环和while循环应用自定义函数公式的实践,套用,练习...
- Java多线程--list.parallelStream().forEach()使用实例
- PAT1069. The Black Hole of Numbers
- NYOJ 99单词拼接(有向图的欧拉(回)路)
- 【BZOJ1196】公路修建问题,二分+最小生成树
- Httpclient远程调用WebService示例
- cookie的封装删除修改
- HTML5 之 FileReader(图片上传)
- 教你在网吧“移”电影
- 开源项目工时系统_工时统计系统 - 服务端
- thinkpad x60安装WINDOWS2003SERVER
- Allegro模块镜像详细操作教程
- 转载:Fiddler 教程
- 2021年中国企业风险投资发展现状及未来发展趋势分析[图]
- 使用AutoJS实现2019天猫双11喵币自动领取
- PTC System Monitor
- Hexo博客使用腾讯云CDN加速及优化
- u盘插到电脑计算机里没有反应,U盘插在Windows7电脑上没反应怎么办?