Blogger Information
Blog 42
fans 3
comment 2
visits 32145
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP第二十七天作业-封装数据操作函数实现增删改查操作-2018-05-10
HeartofSunny的博客
Original
1635 people have browsed it

封装函数funpdo.php

<?php
//封装数据库函数文件

//连接数据库方法
if(!function_exists('connect')){
    function connect($dbname,$type='mysql',$host, $charset, $port,$user,$pass){
        $dsn = "{$type}:host={$host}; dbname={$dbname}; charset={$charset}; port={$port}";//数据源
        $username = 'root'; //数据库用户名
        $password = 'root';     //数据库密码
        //配置连接属性
        $optin = [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,//设置错误模式
            PDO::ATTR_CASE => PDO::CASE_NATURAL,//数据库表字段保持不变
            PDO::ATTR_EMULATE_PREPARES => true, //启用PDO模拟
            //PDO::Mysql_ => true, //启用持久性连接
        ];

        try{
            //实例化PDO类,创建PDO对象
            $pdo = new PDO($dsn,$username,$password,$optin);
        } catch (PDOException $e){
            die('Connect ERROR!:'.$e->getMessage());
        }

        return $pdo;
    }
}

//新增数据
if(!function_exists('insert')){
    function insert($pdo,$table,$data=[]){
        //创建sql语句
        $sql = "INSERT IGNORE {$table} SET ";
        foreach (array_keys($data) as $field){
            $sql .= $field.'=:'.$field.', ';
        }
        //去掉尾部逗号,并添加分号结束
        $sql = rtrim(trim($sql),',').';';
        //创建PDO预处理对象
        $stmt = $pdo->prepare($sql);

        //绑定参数到预处理对象
        foreach ($data as $field => $value){
            $stmt->bindValue(":{$field}",$value);
        }

        //执行新增操作
        if($stmt->execute()){
            if($stmt->rowCount()>0){
                return true;
            }
        }else{
            return false;
        }
    }
}

//更新数据
if(!function_exists('update')){
    function update($pdo,$table,$data=[],$where=''){
        //创建sql语句
        $sql = "UPDATE {$table} SET ";
        foreach (array_keys($data) as $field){
            $sql .= $field.'=:'.$field.', ';
        }
        //去掉尾部逗号,并添加分号结束
        $sql = rtrim(trim($sql),',');

        //添加更新条件
        if(!empty($where)){
            $sql .= ' WHERE '. $where;
        }else{
            return false;
        }
        //创建PDO预处理对象
        $stmt = $pdo->prepare($sql);

        //绑定参数到预处理对象
        foreach ($data as $field => $value){
            $stmt->bindValue(":{$field}",$value);
        }

        //执行新增操作
        if($stmt->execute()){
            if($stmt->rowCount()>0){
                return true;
            }
        }else{
            return false;
        }
    }
}

//查询单条数据
if (!function_exists('find')) {

    function find($pdo,$table,$fields, $where='') {
        //创建SQL语句
        $sql = 'SELECT ';
        if (is_array($fields)) {
            foreach ($fields as $field) {
                $sql .= $field.', ';
            }
        } else {
            $sql .= $fields;
        }
        $sql = rtrim(trim($sql),',');
        $sql .= '  FROM '.$table;
        //添加查询条件
        if(!empty($where)) {
            $sql .= '  WHERE '. $where;
        }
        $sql .= '  LIMIT 1';
        //去掉尾部逗号,并添加分号结束
        $sql = rtrim(trim($sql),',').';';

        //创建PDO预处理对象
        $stmt = $pdo->prepare($sql);


        //执行查询操作
        if($stmt->execute()){
            if($stmt->rowCount()>0){
                $stmt->setFetchMode(PDO::FETCH_ASSOC);
                return $stmt->fetch();
            }
        } else {
            return false;
        }
    }
}

//查询多条记录
if(!function_exists('select')){
    function select($pdo,$table,$fields, $where='',$order='') {
        //创建SQL语句
        $sql = 'SELECT ';
        if (is_array($fields)) {
            foreach ($fields as $field) {
                $sql .= $field.', ';
            }
        } else {
            $sql .= $fields;
        }
        $sql = rtrim(trim($sql),',');
        $sql .= '  FROM '.$table;
        //添加查询条件
        if(!empty($where)) {
            $sql .= '  WHERE '. $where;
        }

        //添加排序条件
        if(!empty($order)) {
            $sql .= ' order by '.$order;
        }

        //去掉尾部逗号,并添加分号结束
        $sql = rtrim(trim($sql),',').';';

        //创建PDO预处理对象
        $stmt = $pdo->prepare($sql);


        //执行查询操作
        if($stmt->execute()){
            if($stmt->rowCount()>0){
                $stmt->setFetchMode(PDO::FETCH_ASSOC);
                return $stmt->fetchAll();
            }
        } else {
            return false;
        }
    }
}

//删除数据
if(!function_exists('delete')){
    function delete($pdo,$table,$where=''){
        //创建sql语句
        $sql = "DELETE FROM {$table} ";

        //添加删除条件
        if(!empty($where)) {
            $sql .= 'WHERE '. $where;
        }else{
            exit('条件不能为空');
        }

        //去掉尾部逗号,并添加分号结束
        $sql = rtrim(trim($sql),',');

        //创建PDO预处理对象
        $stmt = $pdo->prepare($sql);

        //执行新增操作
        if($stmt->execute()){
            if($stmt->rowCount()>0){
                return true;
            }
        }else{
            return false;
        }
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

操作增删该查index.php

<?php
//导入数据库操作函数库
require 'lib/funpdo.php';
//连接数据库
$type = 'mysql';
$host = 'www.develop.ss';
$dbname = 'php';
$charset = 'utf8';
$port = 3306;
$usr = 'root';
$pass = 'root';
$pdo = connect($dbname,$type,$host,$charset,$port,$usr,$pass);

//新增操作
$table = 'staff';
$data = ['name'=>'test','sex'=>1,'age'=>50,'salary'=>6000];
//insert($pdo,$table,$data);

//更新操作
$table = 'staff';
$where = 'staff_id=25';
$data = ['name'=>'test','sex'=>1,'age'=>50,'salary'=>5000];
//update($pdo,$table,$data,$where);

//单条查询操作
$table = 'staff';
$fields = ['name','age','salary'];
$fields = 'name,salary';
$where = 'age > 40';
//echo '<pre>'.print_r(find($pdo, $table, $fields, $where),true).'</pre>';

//多条查询操作
$table = 'staff';
$fields = ['name','age','salary'];
$fields = '*';
$where = 'age < 40';
$order = 'name asc';
//echo '<pre>'.print_r(select($pdo, $table, $fields, $where, $order),true).'</pre>';

//删除数据操作
$table = 'staff';
$where = 'staff_id = 26';
delete($pdo,$table,$where);

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:

    在实现这些功能过程中,我遇到一个问题,就是每次在增删改查的任何过程中都会先报错误:

    PDO::__construct(): MySQL server has gone away

    然后再刷新几次就可以正常运行,开始以为是我的代码问题,改来改去也是还是一直报这个错误,最后,终于找到了解决的方法

       当 PHP 使用PDO访问数据库且脚本需要长时间执行时,频繁会遇见’ MySQL server has gone away’的错误。分析问题产生原因:因为脚本较长时间未与数据库进行通信,导致数据库连接超时与服务器断开连接导致,这时使用断开的数据库连接操作数据库(CRUD),就会产生’ MySQLserver has gone away’的错误提示。解决之道在于长时间运行的脚本需要与服务器保持心跳,一旦检测到连接断开,则需要重新连接数据库。

        以上是网上查到的资料,但是我在PDO的设置代码中已经有了PDO::ATTR_PERSISTENT => true,启用持久性连接的设置,但是还是会断开数据库的链接。

        最后,我把这行PDO::ATTR_PERSISTENT => true代码注释后,终于正常运行了,分析的结果是:应该是你的环境配置不支持性能更佳的长连接,这个程序默认是开启MySQL长连接的。

        由于我是用的linux系统运行的,未在windows下运行,所以不知道在windows系统是否也会有这样的问题。

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post