PDO 操作

原创 2018-11-19 14:55:09 326
摘要:class User {     public $name;     public $email;     public $work;     public $age;  &nbs
class User
{
    public $name;
    public $email;
    public $work;
    public $age;
    public $sex;
    public $password;
    public $status;
    public $create_time;
    public $id;

    /**
     * User constructor.
     * @param $name
     * @param $email
     * @param $work
     * @param $age
     * @param $sex
     * @param $password
     * @param $status
     * @param $create_time
     */
    public function __construct($name, $email, $work, $age, $sex, $password, $status, $create_time)
    {
        $this->name = $name;
        $this->email = $email;
        $this->work = $work;
        $this->age = $age;
        $this->sex = $sex;
        $this->password = $password;
        $this->status = $status;
        $this->create_time = $create_time;
    }


}


class  PdoDao
{


    public $pdo;
    /**
     * @param $obj 增加一条记录
     */
    public function insertOb($obj)
    {
        //1.处理sql 语句
        //  $sql ="insert into user (name,email,work,age,sex,password,status,create_time) values (:name,:email,:work,:age,:sex,:password,:status,:create_time)";
        $data = (array)$obj;
        $obj = (array)$obj;
        $keys = implode(",", array_keys($obj));
        $sql = 'insert into user ' . '(' . $keys . ')';

        foreach ($obj as $k => $v) {
            $obj[$k] = ':' . $k;
        }

        $values = implode(",", array_values($obj));
        $sql = $sql . ' values ' . ' ( ' . $values . ' ) ';
        $stmt = $this->pdo->prepare($sql);
        $datas = [];

        //2.对象转数组 并 封装成需求 数组
        foreach ($data as $k => $v) {

            $datas[':' . $k] = $v;
        }


        //3.执行操作
        if ($stmt->execute($datas)) {
            echo "执行成功";
            echo "最后插入的ID:" . $this->pdo->lastInsertId();
        } else {
            echo "执行失败";
            var_dump($stmt->errorinfo());

        }


    }


    /**
     * 更新一条记录

     */
    public function UpdateOb($arr)
    {
        //1. 根据参数动态生成 sql 预处理
        //$sql ="update user set name=? where id=?";
//        $sql = " UPDATE user SET name=:name WHERE id=:id ";


        $keys = [];

        foreach ($arr as $k => $v) {

            if ($k == 'id') {
                echo 'xxx';

            } else {
                $keys[$k] = ':' . $k;


            }
        }

        $link='';
        foreach ($keys as $k =>$v){
            $link = $link .$k .'='.$v .',';

        }

        $link =     substr($link,0,strlen($link)-1);

        $sql = 'UPDATE user SET  ' . $link . '  WHERE id=:id ';

        //预处理SQL
        $stmt = $this->pdo->prepare($sql);
        $datas = [];
        //2.数据绑定
        foreach ($arr as $k => $v) {

            $datas[':' . $k] = $v;
        }
        echo "<pre>";
        print_r($datas);


        //3.执行操作
        if ($stmt->execute($datas)) {
            echo "执行成功";
            echo "更改的 行" . $stmt->rowCount();
        } else {
            echo "执行失败";
            var_dump($stmt->errorinfo());

        }


    }








    /**
     * 查询记录

     */
    public function SelectOb($id)
    {
        //1. 根据参数动态生成 sql 预处理
       $sql = " SELECT *  FROM  user   WHERE id >=:id ";


        //预处理SQL
        $stmt = $this->pdo->prepare($sql);

        //2.数据绑定
        $datas = [':id'=>$id];
        //3.执行操作

        $stmt->execute($datas);
        echo "<pre>";
       //推荐这种方式来获取查询结果
        while ($row=$stmt->fetch())
        {
            var_dump($row);

        }





    }



























    public function DbConnect()
    {

        $dsn = 'mysql:host=localhost;dbname=php_edu;port=3306;charset=utf8'; //数据源  = 数据库类型:host=主机地址;dbname=数据库名;port=数据库端口;
        $username = 'root';//用户名
        $password = 'stan183';//密码

        try {

            //1.连接 PDO
            $this->pdo = new PDO($dsn, $username, $password); //


            //2.操作数据库

            //3.关闭PDO2种方式  (关闭不是必须,脚本结束会自动关闭,连接资源不够,也会把最早的关闭,建议显示关闭)

//    $pdo = null;
//    unset($pdo);  //比较暴力

            echo '连接成功。。。';
        } catch (PDOException $e) {

            die('Could not connect to the database:<br/>' . $e);

        }
    }


    /**
     * 数组 转 对象
     *
     * @param array $arr 数组
     * @return object
     */
    function array_to_object($arr)
    {
        if (gettype($arr) != 'array') {
            return;
        }
        foreach ($arr as $k => $v) {
            if (gettype($v) == 'array' || getType($v) == 'object') {
                $arr[$k] = (object)array_to_object($v);
            }
        }

        return (object)$arr;
    }

    /**
     * 对象 转 数组
     *
     * @param object $obj 对象
     * @return array
     */
    function object_to_array($obj)
    {
        $obj = (array)$obj;
        $obs = [];
        foreach ($obj as $k => $v) {

            if (gettype($v) == 'resource') {

                return;
            } else if (gettype($v) == 'object' || gettype($v) == 'array') {
                $obj[$k] = (array)object_to_array($v);

            } else {

                $obs[':' . $k] = $v;

            }


        }

        return $obs;
    }


}


//$sql ="insert into user (name,email,work,age,sex,password,status,create_time)values(:name,:email,:work,:age,:sex,:password,:status,:create_time)";  //insert
//$sql ="insert into user set name=:na,email=:em,work=:wk,age=:ag,sex=:se,password=:psd,status=:sta,creat_time=:ct";

//$sql =" UPDATE  user (name,email,work,age,sex,password,status,creat_time)values(:na,:em,:wk,:ag,:se,:psd,:sta,:ct)";  //update?

//$sql ="insert into user (name,email,work,age,sex,password,status,creat_time)values(:na,:em,:wk,:ag,:se,:psd,:sta,:ct)";  //query


//$stmt=$pdo->prepare($sql);
//
//
//$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
//
//


$name = '周星星';
$work = '工程师';
$sex = 1;
$age = 20;
$email = 'neo123@gmail.com';
$st = 1;
$ct = 2121;
$psd = '密码';
$user = new User($name, $email, $work, $age, $sex, $psd, $st, $ct);


$Dao = new PdoDao();
$Dao->DbConnect();


$data = [

    'id'=>22,
    'name' => 'change',
    'sex' => 0,
    'age' => 11,
    'status' => 0,
    'create_time' => '22222',
    'password' => 'no',
    'email' => '我是email'
];
//增加一条记录
$Dao->insertOb($user);

//更新数据
$Dao->UpdateOb($data);

//根据 id 查询
$Dao->SelectOb('12');


批改老师:查无此人批改时间:2018-11-19 15:19:18
老师总结:写的不错,数据库操作熟悉了,php对你来说就没什么难的了。

发布手记

热门词条