php操作数据库工具类

Posted 客官不爱喝酒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php操作数据库工具类相关的知识,希望对你有一定的参考价值。

基于mysqli扩展封装的一个工具类,写了一些常用的数据库操作,但是没有预定参数sql的封装,可能会导致sql注入问题,后期再进行优化。

1.工具类代码:

<?php

# 使用之前需要引入该模块 require 或 require_one
class MSQLUtils{

     # 连接数据库对象
    public $connection;

    /**
     * 功能:获取mysql连接对象
     * @param $host 主机名称
     * @param $user 用户名
     * @param $password 密码
     * @param $database 需要连接的数据库
     * @return false|mysqli 返回数据库连接对象
     */
    function getConnection($host,$user,$password,$database){
        $this->connection=mysqli_connect($host,$user,$password,$database) or die("连接数据库失败");
        # 设置字符集
        mysqli_query($this->connection,"set names utf8");

       # 返回连接数据库的对象
      return $this->connection;
    }

    /**
     * 功能:查询某张表中的全部数据
     * @param $tableName 表名
     * @return bool|mysqli_result 返回查询的结果集
     */
    function queryAll($tableName){
        $sql="select * from ".$tableName;
        # 执行查询 并且返回查询结果
        return  mysqli_query($this->connection,$sql);
    }

    /**功能:向指定的表中插入数据,参数为一个关联数组
     * @param $tableName 表名
     * @param $args 需要添加的字段(关联数组)
     * @return bool|mysqli_result 执行成功返回true 执行失败返回false
     */
    function insert($tableName,$args){
        # 获取关联数组的长度
        $length=count($args);
        # 辅助指针 移动key和value的位置
        $index=0;
        # sql 前半部分
        $sql1="insert into ".$tableName."(";
        # sql 后半部分
        $sql2="values(";
        foreach($args as $key=>$value)
        {
           # 如果为第一次不加 ,其余的都加上 拼接key部分
           if ($index==0){
              $sql1=$sql1.$key;
           }else{
               $sql1=$sql1.",".$key;
           }
           if ($index==$length-1){
               $sql1.=")";
           }

           # 如果为第一次不加 ,其余的都加上 拼接value部分
           if ($index==0){
               $sql2.="'".$value."'";
           }else{
               $sql2.=","."'".$value."'";
           }
            if ($index==$length-1){
                $sql2=$sql2.")";
            }
            # 让指针往后移动
            $index++;
        }
        # 将key和value进行拼接组成一条完整的sql
        $sql=$sql1.$sql2;
        # 执行sql 并且返回一个布尔值
        return mysqli_query($this->connection,$sql);
    }

    /**
     * 功能:通过id删除某张表中的记录
     * @param $tableName 表名
     * @param $idName id名称
     * @param $id key
     * @return bool|mysqli_result 删除成功返回true 删除失败返回false
     */
    function deleteById($tableName,$idName,$id){
        $sql="delete from $tableName where $idName=$id";
        # 执行sql 并返回执行结果
        return mysqli_query($this->connection,$sql);
    }

    /**
     * 功能:传入一条sql执行,返回结果集 (推荐使用该方法)
     * @param $sql sql语句
     * @return bool|mysqli_result 返回执行后的结果集
     */
    function executeSql($sql){
      return mysqli_query( $this->connection,$sql);
    }

    /**
     * 功能:修改表中的数据
     * @param $tableName 表名
     * @param $field 关联数组(字段和字段值)
     * @param $condition 修改条件
     */
    function update($tableName,$field,$condition){

        $sql="update ".$tableName." set ";
        # ;用于拼接字段和value
        $updateField="";
        # 定义一个辅助指针,用于循环遍历关联数组
        $index=0;
        foreach ($field as $key=>$value){
         if ($index==0){
             $updateField.=$key."="."'".$value."'";
         }else{
             $updateField.=",".$key."="."'".$value."'";
         }
         $index++;
        }
        # 组合完成后的完整sql
        $sql.=$updateField." where ".$condition;

        # 执行sql并且返回结果集
        return mysqli_query($this->connection,$sql);
    }

    /**
     * 功能:按照条件查询某些字段的值
     * @param $tableName 需要查询的表名
     * @param $arrArgs 一个索引数组(字段名)
     * @param $condition 查询条件
     * @return bool|mysqli_result
     */
    function selectByCondition($tableName,$arrArgs,$condition){
        # 最终完整的sql
        $sql="";
        # 需要查询的字段
        $selectFiled="";
        # 查询条件
        $length=count($arrArgs);
        for ($i=0;$i<$length;$i++){
           if ($i==0){
               $selectFiled.="select ".$arrArgs[$i];
           }else{
               $selectFiled.=",".$arrArgs[$i];
           }
        }
        # 组合为一条完整sql
        $sql.=$selectFiled." from ".$tableName." where ".$condition;
        # 执行查询 并且返回查询结果集
        return mysqli_query($this->connection,$sql);
    }

    /**
     * 功能:通过id查询一条数据 注意 :数据库字段名必须为 id
     * @param $tableName 需要查询的表名
     * @param $id 按照此di进行查询
     * @return bool|mysqli_result 返回查询结果集
     */
    function selectById($tableName,$id){
        # 拼接传递过来的sql
        $sql="select * from ".$tableName." where id=".$id;
        # 返回查询结果集
        return mysqli_query($this->connection,$sql);
    }

    /**
     * 该对象销毁时关闭msql连接
     */
    function __destruct()
    {
        mysqli_close($this->connection);
     }
}

2.测试代码:

<?php

require("MSQLUtils.php");

$driver=new MSQLUtils();

# 获取数据库连接
$connection=$driver->getConnection("主机名称","用户名","密码","数据名称");

# 查询所有的数据 返回一个数据结果集
$result=$driver->queryAll("t_emp");

# 定义一个关联数组 用于测试添加数据和修改数据
$arr=array("salary"=>"5566","age"=>"20","department"=>"产品部","name"=>"卡夫卡","sex"=>"女");

#向数据库中添加数据
#var_dump($connection->insert("t_emp",$arr));

# 通过id删除表中的数据
#var_dump($driver->deleteById("t_emp","id",27));

# 执行sql的方法
$sql="select * from t_emp";
#var_dump(mysqli_fetch_assoc($driver->executeSql($sql)));

# 执行修改操作
$driver->update("t_emp",$arr,"id=26 and name='root'");

#按照条件查询某些字段
$arr=array("id","name","department","sex","salary");
#$selectResult=$driver->selectByCondition("t_emp",$arr,"id>'2' and sex='女'");
#var_dump(mysqli_fetch_assoc($selectResult));

# 按照id查询某条数据
$selectResult=$driver->selectById("t_emp","26");
var_dump("查询结果:",mysqli_fetch_assoc($selectResult));


以上是关于php操作数据库工具类的主要内容,如果未能解决你的问题,请参考以下文章

PHP必用代码片段

elasticsearch代码片段,及工具类SearchEsUtil.java

solr分布式索引实战分片配置读取:工具类configUtil.java,读取配置代码片段,配置实例

超级有用的9个PHP代码片段

rudonSqlite{} - SQLite3简易操作类 - SQLite增删改查 - PHP工具

rudonSqlite{} - SQLite3简易操作类 - SQLite增删改查 - PHP工具