php pdo操作mysql

pdo链接MySQL数据库

/1.php

<?php
//链接mysql数据库

$config = [
    'host'=>'127.0.0.1',
    'user'=>'root',
    'password'=>'root',
    'database'=>'php',
    'charset'=>'utf8'
];
$dsn = sprintf("mysql:host=%s;dbname=%s;charset=%s",$config['host'],$config['database'],$config['charset']);

try{
    $pdo = new PDO($dsn,$config['user'],$config['password']);
    var_dump($pdo);
}catch (PDOException $e){
    die($e->getMessage());
}

浏览器访问1.php 查看结果

pdo操作mysql执行语句

/2.php

<?php

//pdo操作执行语句

$config = [
    'host' => '127.0.0.1',
    'user' => 'root',
    'password' => 'root',
    'database' => 'php',
    'charset' => 'utf8'
];
$dsn = sprintf("mysql:host=%s;dbname=%s;charset=%s", $config['host'], $config['database'], $config['charset']);

try {
    $pdo = new PDO($dsn, $config['user'], $config['password']);

    //插入
    $sql = "INSERT INTO student (name,age) VALUES ('李五','24'),('王小红','26')";
    echo $pdo->exec($sql);

    //更新
    $sql = "UPDATE student SET age = '34' where id = 5";
    echo $pdo->exec($sql);

    //删除
    $sql = "DELETE FROM student where id = 5";
    echo $pdo->exec($sql);

} catch (Exception $e) {
    die($e->getMessage());
}

浏览器访问2.php 修改配置查看插入,更新,删除效果

pdo操作mysql查询语句

/3.php

<?php
//pdo操作查询语句

$config = [
    'host' => '127.0.0.1',
    'user' => 'root',
    'password' => 'root',
    'database' => 'php',
    'charset' => 'utf8'
];
$dsn = sprintf("mysql:host=%s;dbname=%s;charset=%s", $config['host'], $config['database'], $config['charset']);

try {
    $pdo = new PDO($dsn, $config['user'], $config['password']);

    //设置返回结果集类型
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
    //$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);
    //$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

    //读取
    $sql = "select * from student";
    $query = $pdo->query($sql);
    $rows = $query->fetchAll();
    echo "<pre>";
    print_r($rows);

    //循环结果集
    $sql = "select * from student";
    $query = $pdo->query($sql);
    $rows = $query->fetch();
    while($field = $query->fetch()){
        echo sprintf("name:%s,age:%s<br>",$field['name'],$field['age']);
    }

} catch (Exception $e) {
    die($e->getMessage());
}

浏览器访问3.php 修改配置查看效果

pdo prepare预处理 可防止SQL注入

/4.php

<?php
//pdo prepare预处理 可防止SQL注入

$config = [
    'host' => '127.0.0.1',
    'user' => 'root',
    'password' => 'root',
    'database' => 'php',
    'charset' => 'utf8'
];
$dsn = sprintf("mysql:host=%s;dbname=%s;charset=%s", $config['host'], $config['database'], $config['charset']);

try {
    $pdo = new PDO($dsn, $config['user'], $config['password']);

    //设置返回结果集类型
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

    //SQL注入
    //http://www.example.com:88/php/pdo/4.php?id=2 or id>1
    //读取
    $sql = "select * from student where id = {$_GET['id']}";
    $query = $pdo->query($sql);
    $rows = $query->fetchAll();
    echo "<pre>";
    print_r($rows);

    //prepare预处理 可防止SQL注入
    $sql = "select * from student where id = :id";
    $query = $pdo->prepare($sql);
    $query->execute([':id'=>$_GET['id']]);
    $rows = $query->fetchAll();
    echo "<pre>";
    print_r($rows);


} catch (Exception $e) {
    die($e->getMessage());
}

浏览器访问4.php 修改配置查看效果

pdo操作mysql的封装

/PdoMysql.php

<?php
namespace Database;

use PDO;

class PdoMysql{

    protected $link;

    protected $options =[
        'table'=>'',
        'fields'=>'*',
        'order'=>'',
        'limit'=>''
    ];

    //初始化
    public function __construct($config)
    {
        $this->connect($config);
    }

    //连接MySQL
    protected function connect(array $config){
        $dsn = sprintf("mysql:host=%s;dbname=%s;charset=%s", $config['host'], $config['database'], $config['charset']);
        $this->link = new PDO($dsn, $config['user'], $config['password']);
    }

    //查询
    public function query(string $sql, array $values=[]){
        $query = $this->link->prepare($sql);
        $query->execute($values);
        return $query->fetchAll();
    }

    //执行
    public function execute(string $sql, array $values = []){
        $query = $this->link->prepare($sql);
        return $query->execute($values);
    }

    //表名
    public function table(string $table){
        $this->options['table'] = $table;
        return $this;
    }

    //查询字段
    public function fields(...$fields){
        $fields = '`'. implode('`,`',$fields).'`';
        $this->options['fields'] = $fields;
        return $this;
    }

    //limit
    public function limit(...$limit){
        $limit = implode(',',$limit);
        $this->options['limit'] = " limit " . $limit;
        return $this;
    }

    //order
    public function order(string $order){
        $this->options['order'] = " order by " . $order;
        return $this;
    }

    //条件
    public function where(string $where){
        $this->options['where'] = " where " . $where;
        return $this;
    }

    //查询语句生成器
    public function get(){
        //select * from student where order limit

        $sql = "select {$this->options['fields']} from {$this->options['table']} {$this->options['where']} {$this->options['order']} {$this->options['limit']}";
        return $this->query($sql);
    }

    //插入
    public function insert(array $values){
        //insert into student () values ();
        $fields = "`" . implode('`,`',array_keys($values)) . "`";
        $placeholders = implode(',',array_fill(0,count($values),'?'));
        $sql = "insert into {$this->options['table']} ($fields) values ($placeholders)";

        return $this->execute($sql,array_values($values));
    }

    //更新
    public function update(array $values){
        //update student set name=?,age=?
        if(empty($this->options['where'])){
            throw new \Exception('update需要条件');
        }
        $fields = implode('=?,',array_keys($values))."=?";
        $sql = "update {$this->options['table']} set ($fields) {$this->options['where']}";
        return $this->execute($sql,array_values($values));
    }

    //删除
    public function delete(){
        //delete fromm student where
        if(empty($this->options['where'])){
            throw new \Exception('delete需要条件');
        }
        $sql = "delete from {$this->options['table']} {$this->options['where']}";
        return $this->execute($sql);
    }
}

测试PdoMysql.php封装

/5.php

<?php
include 'PdoMysql.php';
use Database\PdoMysql;

//数据库配置
$config = [
    'host' => '127.0.0.1',
    'user' => 'root',
    'password' => 'root',
    'database' => 'php',
    'charset' => 'utf8'
];
try{

    $pdo = new PdoMysql($config);


    //查询
    $r = $pdo->query('select * from student where id=:id',[":id"=>4]);
    var_dump($r);

    //执行
//    $sql = "INSERT INTO student SET name=:name,age=:age";
//    $values = ['name'=>'梁梅','age'=>'33'];
//    $r = $pdo->execute($sql,$values);
//    var_dump($r);

//    $r = $pdo->table('student')
//        ->fields('name','age')
//        ->limit(1,5)
//        ->where('id>5')
//        ->order("id desc")
//        ->get();
//    echo "<pre>";
//    var_dump($r);

//    //insert
//    $r = $pdo->table('student')->insert(['name'=>'小花','age'=>'27']);
//    var_dump($r);

//    //update
//    $r = $pdo->table('student')->where("id=11")->update(['name'=>'小花','age'=>'25']);
//    var_dump($r);

    //delete
//    $r = $pdo->table('student')->where("id=11")->delete();
//    var_dump($r);
}catch (Exception $e){
    die($e->getMessage());
}

浏览器访问5.php,修改配置查看效果

上一篇:php基础入门:mysql和Ajax


下一篇:PHP-PDO参数绑定问题