php利用PDO对数据库的操作练习

刚从python转来做php,目前在学习laravel框架,新项目准备基于laravel框架的前后端分离模式。
这次练习,需要两个文件,分别是index.html,index.php。
index.html做为前端静态页面,通过ajax做数据请求,这么做是为了复习一下ajax的写法。

index.html

<!doctype html>
<head>
	<!--不写这句,页面无法解析中文字符-->
    <meta charset="UTF-8">
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <title>CHUENG</title>
</head>
<body>
<a id="code">点击向后端发送请求!</a>
</body>

<script type="text/javascript">
    $('#code').click(function () {
        $.ajax({
            url: '/php-study/index.php',
            type: 'get',
            data: {
            	<!--通过修改action的value值,来访问后端index.php不同的方法-->
                action: 'check',
                dbname: 'phpstudy',
                <!--发送查询语句-->
                query: "SELECT * FROM user;",
                <!--发送插入语句-->
                insert: "INSERT INTO user (id, username) VALUES(0, 'monkey');"
            },
            success: function (resp) {
                $('body').html(resp);
            }
        })
    })
</script>
</html>

index.php

<?php

class PdoDB
{
    private $servername = 'localhost';
    private $username = 'root';
    private $password = 'root';
    private $dbname = 'edu';

    private static $_instance = NULL;

    // 设为私有方法后,不能通过new来创建实例对象了,只能由内部提供静态方法来调用
    private function __construct()
    {
        try {
            $this->conn = new PDO(
                "mysql:host=$this->servername;dbname=$this->dbname;",
                $this->username,
                $this->password
            );
            // 设置 PDO 错误模式为异常
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            $e->getMessage();
        }
    }

    // 由这个函数来new一个类的实例,进而实现单例需求.
    public static function getInstance()
    {
        if (is_null(self::$_instance)) {
            self::$_instance = new PdoDB();
        }
        return self::$_instance;
    }

    public function __clone()
    {
        die('Clone is not allowed.' . E_USER_ERROR);
    }

    // 程序结束后自动调用该函数,这里不设置成私有方法,是为了让实例自行调用.
    public function __destruct()
    {
        $this->conn = NULL;
    }

    // 创建数据库
    public function create($data)
    {
        try {
            $sql = "CREATE DATABASE $data ;";
            // 使用 exec() ,没有结果返回
            $this->conn->exec($sql);
            echo $data . '数据库创建成功!';
        } catch (PDOException $e) {
            echo $sql . '<br>' . $e->getMessage();
        }
    }

    // 查询数据库
    public function check($data)
    {
        try {
            $result = $this->conn->query($data)->fetchAll(PDO::FETCH_ASSOC);
            echo '<pre>';
            //var_dump($result);
            $result_json = json_encode($result);
            echo $result_json;
        }
        catch (PDOException $e) {
            echo $data . '<br>' . $e->getMessage();
        }
    }

    public function insert($data)
    {
        try {
            $result = $this->conn->exec($data);
            echo $result;
        } catch (PDOException $e) {
            echo $data . '<br>' . $e->getMessage();
        }
    }
}

$db = PdoDB::getInstance();
switch ($_GET['action']) {
    case 'connect':
        echo '数据库连接成功!';
        break;
    case 'create':
        $db->create($_GET['dbname']);
        break;
    case 'check':
        $db->check($_GET['query']);
        break;
    case 'insert':
        $db->insert($_GET['insert']);
        break;
    default:
        break;
}

猜你喜欢

转载自blog.csdn.net/weixin_42127490/article/details/88396954