mysqlHelper.php 2.36 KB
<?php
/**
 * 数据库帮助类
 */
class mysqlHelper
{
    protected $config = [];

    protected $connection;

    public function __construct($config = '')
    {
        $cfg = include('config.php');
        $this->config = empty($config) ? $config = [
            'driver' => $cfg['driver'],
            'host' => $cfg['host'],
            'port' => $cfg['port'],
            'dbname' => $cfg['dbname'],
            'user' => $cfg['user'],
            'pass' => $cfg['pass'],
            'options' => [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_CASE => PDO::CASE_NATURAL
            ]
        ] : $config;
        $this->connection = $this->createConnection();
    }

    private function createConnection()
    {
        $config = $this->config;
        try {

            $dsn = "{$config['driver']}:host={$config['host']};port={$config['port']};dbname={$config['dbname']}";
            $connection = new PDO($dsn, $config['user'], $config['pass'], $config['options']);
            $connection->exec('set names utf8');
            return $connection;
        } catch (\Exception $e) {
            die($e->getMessage());
        }
    }

    public function insert($table, $data = [])
    {
        $placeholder = rtrim(implode(", ", array_fill(0, count($data), '?')), ',');
        $format = "INSERT INTO `{$table}` (%s) VALUES (%s)";
        $query = vsprintf($format, [implode(', ', array_keys($data)), $placeholder]);
        $statement = $this->connection->prepare($query);
        $statement->execute(array_values($data));
    }

    public function update($query, $data = [])
    {
        $statement = $this->connection->prepare($query);
        // for ($i = 1; count($params) >= $i; $i++) {
        //     $statement->bindValue($i, $params[i]);
        // }
        $statement->execute($data);
        return $statement->rowCount();
    }

    public function fetch($query, $data = [])
    {
        $statement = $this->connection->prepare($query);
        $statement->execute($data);

        return $statement->fetch(PDO::FETCH_ASSOC);
    }

    public function fetchAll($query, $data = [])
    {
        $statement = $this->connection->prepare($query);
        $statement->execute($data);

        return $statement->fetchAll(PDO::FETCH_ASSOC);
    }

    public function getLastInsertId()
    {
        return $this->connection->lastInsertId();
    }
}