写了一个php程序,希望可以优化运行效率和安全(防注入),欢迎各种招数飞来?

时间:2016-06-06 16:45:19 来源:互联网 作者: 神秘的大神 字体:

回复内容:

革命尚未成功,同志仍需努力。很多的代码其实用不到。这段程序完全可以优化的很短。
你看看我之前写的一个DB类。参考一下。都互相学习学习。

我中间的scalar和find方法还有一些问题。请能人帮忙解答一下。还有就是之前的插入,更新,删除都是用的数组,这个让我给成用原生sql了。也可以改成数组。
请帮忙看看,批评指正一下。

     /**  * MySQL数据库类 使用的是PDO  */ class DB{ /**  * 数据库实例  */ private static $db_instance; /**  * 保存错误消息  */ private static $_error; /**  * 禁止复制 为了单例模式  */ private function __clone(){} /**  * 防止反序列化 为了单例模式  */ private function __wakeup(){} /**  * 防止实例化  */ private function __construct(){} /**  * 数据库实例化 这里如果实例化失败会产生一个错误,我没有去进行捕获。  */ private static function getInstance(){ if (empty(self::$db_instance)) { $config = Config::get('db'); self::$db_instance = new \PDO('mysql:host='. $config['host'] .';dbname=' . $config['database'] . ';port=' . $config['port'], $config['username'], $config['password'], array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'set names ' . $config['charset'], \PDO::ATTR_TIMEOUT => $config['timeout'])); } return self::$db_instance; } /**  * 查询标量数据  * @param string $sql 执行的sql语句  * @param string $params 需要替换$sql中的问号 如果没有?,则为空数组  */ public static function scalar($sql, $params = []){ $data = self::selectQuery('scalar', $sql, $params); if (!empty($data[0])) { return $data[0]; }else{ return ''; } } /**  * 查询单列数据  * @param string $sql 执行的sql语句  * @param string $params 需要替换$sql中的问号 如果没有?,则为空数组  */ public static function column($sql, $params = []){ return self::selectQuery('column', $sql, $params); } /**  * 查询一行记录  */ public static function find($sql, $params = []){ $result = self::selectQuery('find', $sql, $params); if (empty($result[0])) { return []; } return $result; } /**  * 查询多行记录  */ public static function all($sql, $params = []){ return self::selectQuery('all', $sql, $params); } /**  * 查询数据  */ private static function selectQuery($type, $sql, $params){ self::getInstance(); $instanceStatement = self::$db_instance->prepare($sql); $result = $instanceStatement->execute($params); if ($result === false) { self::$_error = $instanceStatement->errorInfo(); return false; }else{ self::$_error = null; switch ($type) { case 'column': //获取指定的一列数据 case 'scalar': return $instanceStatement->fetchAll(\PDO::FETCH_COLUMN); break; //获取指定的一行数据 case 'find': //获取执行的一行数据 case 'all': //获取全部数据 default: return $instanceStatement->fetchAll(\PDO::FETCH_ASSOC); break; } } } /**  * 插入单行数据数据  * @param string $sql 执行的sql语句  * @param array $params 需要插入的参数;  */ public function insert($sql, $params = []){ return self::executeQuery('insert', $sql, $params); } /**  * 更新数据  */ public function update($sql, $params = []){ return self::executeQuery('update', $sql, $params); } /**  * 更新数据数据   * @param string $type insert update delete  * @param string $sql 执行的sql语句  * @param array $params 需要替换?的数据 格式[field1, field2, ...];  */ private function executeQuery($type, $sql, $params){ self::getInstance(); //初始化 $instanceStatement = self::$db_instance->prepare($sql); $result = $instanceStatement->execute($params); if ($result === false) { $this->_error = $instanceStatement->errorInfo(); return false; }else{ $this->_error = ''; //清除上次的错误信息 if ($type == 'insert') { return $this->db->lastInsertId() + $instanceStatement->rowCount() - 1; //测试性质 (不一定正确,风险极高) }else{ return $instanceStatement->rowCount(); } } } /**  * 获取错误消息  */ public static function error(){ return self::$_error; } /**  * 消除实例  */ public static function clear(){ self::$db_instance = null; } } ?> 
那我不客气了。

从头到尾都是辣鸡。

好大一个洞,随时被人爆。用 prepared statement 吧兄弟

->arrays() 这个方法从命名到实现都很 orz ,别人在调用这个方法的时候心情大概跟吃了大便差不多。

连接方法没有处理好重入, 导致 conn 对象重复创建也是醉。

参数初始化放到构造函数里去啊,依赖全局变量什么鬼。

类名丑爆。
$this->result = mysql_query("$query",$this->conn); 
建议题主去看看Yii framework或者laravel它们的数据库封装是怎么做的,你写的这些方法只能认为是来黑php的 好多多余的代码 我要学编程网wyxbc.com最新课程二维码

相关文章


  • PHP如何安装和配置?
  • php 和 python 语法(部分)上的区别
  • PHP 随机数 C扩展随机数
  • PHP查询附近的人及其距离的实现方法_php技巧
  • 写了一个php程序,希望可以优化运行效率和安全(防注入),欢迎各种招数飞来?
  • 网友评论

    文明上网理性发言,请遵守 新闻评论服务协议

    我要评论
    • PHP
    • MySQL
    • HTML
    • CSS
    • JavaScript
    • jQuery
    • AJAX
    • Html5
    <img width="180" height="124" src="http://img.php.cn/upload/course/000/000/003/5a50894c3ee41784.jpg" alt="独孤九贱(5)_ThinkPHP5视频教程">

    独孤九贱(5)_ThinkPHP5视频教程

    ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...

    • <img src="http://img.php.cn/upload/avatar/000/001/120/5bdff93895600756.jpeg"> Peter-Zhu
    • 2017-05-16 12:03:57
    • 点击数(160688)

    <img width="180" height="124" src="http://img.php.cn/upload/course/000/000/003/5a508deef1e58616.jpg" alt="独孤九贱(4)_PHP视频教程">

    独孤九贱(4)_PHP视频教程

    江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。 我要学编程网wyxbc.com出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...

    • <img src="http://img.php.cn/upload/avatar/000/001/120/5bdff93895600756.jpeg"> Peter-Zhu
    • 2017-03-20 22:47:17
    • 点击数(157720)

    <img width="180" height="124" src="http://img.php.cn/upload/course/000/000/003/5a5091db685e6482.jpg" alt="独孤九贱(1)_HTML5视频教程">

    独孤九贱(1)_HTML5视频教程

    《php.cn原创html5视频教程》课程特色:我要学编程网wyxbc.com原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。 ...

    • <img src="http://img.php.cn/upload/avatar/000/001/120/5bdff93895600756.jpeg"> Peter-Zhu
    • 2017-03-13 10:15:11
    • 点击数(126737)

    <img width="180" height="124" src="http://img.php.cn/upload/course/000/000/003/5a9ce29211b72919.jpg" alt="ThinkPHP5实战之[教学管理系统]">

    ThinkPHP5实战之[教学管理系统]

    本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。

    • <img src="http://img.php.cn/upload/avatar/000/001/120/5bdff93895600756.jpeg"> Peter-Zhu
    • 2017-07-24 16:48:56
    • 点击数(119167)

    <img width="180" height="124" src="http://img.php.cn/upload/course/000/000/003/5a53132d0bd62424.jpg" alt="PHP入门视频教程之一周学会PHP">

    PHP入门视频教程之一周学会PHP

    所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...

    • <img src="http://img.php.cn/upload/avatar/000/000/004/5c511d62e6c0e698.png"> 大家讲道理
    • 2016-11-16 14:54:14
    • 点击数(118886)