J PHP增刪改查pdo

Db.class.PHP 數據庫連接文件

<?php
// 連接數據庫
class Db {
    static public function getDB() {
        try {
            $pdo = new PDO(DB_DSN, DB_USER, DB_PWD);
            $pdo->setAttribute(PDO::ATTR_PERSISTENT, true);    // 設置數據庫連接爲持久連接
            $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 設置拋出錯誤
            $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 設置當字符串爲空轉換爲 SQL 的 NULL
            $pdo->query('SET NAMES utf8');  // 設置數據庫編碼
        } catch (PDOException $e) {
            exit('數據庫連接錯誤,錯誤信息:'. $e->getMessage());
        }
        return $pdo;
    }
}
?>

Model.class.php 數據庫操作文件

<?php  
/** 
* 數據庫操作類庫  
*/  
class Model {  

    /** 
     * 數據庫添加操作 
     * @param string $tName 表名 
     * @param array $field 字段數組 
     * @param array $val 值數組 
     * @param bool $is_lastInsertId 是否返回添加ID 
     * @return int 默認返回成功與否,$is_lastInsertId 爲true,返回添加ID 
     */  
    public function add($tName, $field, $val, $is_lastInsertId=FALSE) {  
        try {  
            if (!is_array($field) || !is_array($val)) exit($this->getError(__FUNCTION__, __LINE__));  
            $pdo = Db::getDB();  
            $field = $this->formatArr($field);  
            $val = $this->formatArr($val, false);  
            if (!$is_lastInsertId) {  
                $row = $pdo->exec("INSERT INTO {$tName} ({$field}) VALUES ({$val})");  
                $pdo = null;  
                return $row;  
            } else {  
                $pdo->exec("INSERT INTO {$tName} ({$field}) VALUES ({$val})");  
                $lastId = $pdo->lastInsertId();  
                $pdo = null;  
                return $lastId;  
            }  
        } catch (PDOException $e) {  
            exit($e->getMessage());  
        }  
    }  

    /** 
     * 數據庫修改操作 
     * @param string $tName 表名 
     * @param array $field 字段數組 
     * @param array $val 值數組 
     * @param string $condition 條件 
     * @return int 受影響的行數 
     * $result2 = $m->update('dr_1_special_buy',array('isread'=>0), 'isread=1');
     * 這個值數組不好寫,這是一個例子
     */  
    public function update($tName, $fieldVal, $condition) {  
        try {  
            if (!is_array($fieldVal) || !is_string($tName) || !is_string($condition)) exit($this->getError(__FUNCTION__, __LINE__));  
            $pdo = Db::getDB();  
            foreach ($fieldVal as $k=>$v) {  
                $upStr .= $k . '=' . '\'' . $v . '\'' . ',';  
            }  
            $upStr = rtrim($upStr, ',');  
            $row = $pdo->exec("UPDATE {$tName} SET {$upStr} WHERE {$condition}");  
            $pdo = null;  
            return $row;  
        } catch (PDOException $e) {  
            exit($e->getMessage());  
        }  
    }  

    /** 
     * 數據庫刪除操作(注:必須添加 where 條件) 
     * @param string $tName 表名 
     * @param string $condition 條件 
     * @return int 受影響的行數 
     */  
    public function del($tName, $condition) {  
        try {  
            if (!is_string($tName) || !is_string($condition)) exit($this->getError(__FUNCTION__, __LINE__));  
            $pdo = Db::getDB();  
            $row = $pdo->exec("DELETE FROM {$tName} WHERE {$condition}");  
            return $row;  
            $pdo = null;  
        } catch (PDOException $e) {  
            exit($e->getMessage());  
        }  
    }  

    /** 
     * 返回表總個數 
     * @param string $tName 表名 
     * @param string $condition 條件 
     * @return int 
     */  
    public function total($tName, $condition='') {  
        try {  
            if (!is_string($tName)) exit($this->getError(__FUNCTION__, __LINE__));  
            $pdo = Db::getDB();  
            $re = $pdo->query("SELECT COUNT(*) AS total FROM {$tName}" . ($condition=='' ? '' : ' WHERE ' . $condition));  
            foreach ($re as $v) {  
                $total = $v['total'];  
            }  
            return $total;  
        } catch (PDOException $e) {  
            exit($e->getMessage());  
        }  
    }  

    /** 
     * 數據庫刪除多條數據 
     * @param string $tName 表名 
     * @param string $field 依賴字段 
     * @param array $ids 刪除數組 
     * @return int 受影響的行數 
     */  
    public function delMulti($tName, $field, $ids) {  
        try {  
            if (!is_string($tName) || !is_array($ids)) exit($this->getError(__FUNCTION__, __LINE__));  
            $pdo = Db::getDB();  
            foreach ($ids as $v) {  
                $delStr .= $v . ',';  
            }  
            $delStr = rtrim($delStr, ',');  
            $row = $pdo->exec("DELETE FROM {$tName} WHERE {$field} IN ({$delStr})");  
            $pdo = null;  
            return $row;  
        } catch (PDOException $e) {  
            exit($e->getMessage());  
        }  
    }  

    /** 
     * 獲取表格的最後主鍵(注:針對 INT 類型) 
     * @param string $tName 表名 
     * @param string $primaryName 依賴字段 
     * @return int 
     */  
    public function lastId($tName, $primaryName) {  
        try {  
            if (!is_string($tName) || !is_string($primaryName)) exit($this->getError(__FUNCTION__, __LINE__));  
            $pdo = Db::getDB();  
            $re = $pdo->query("SELECT {$primaryName} FROM {$tName} ORDER BY {$primaryName} DESC LIMIT 1");  
            $lastId = null;  
            foreach ($re as $v) {  
                $lastId = $v[$primaryName];  
            }  
            $pdo = null;  
            return $lastId;  
        } catch (PDOException $e) {  
            exit($e->getMessage());  
        }  
    }  

    /**  
     * 返回全部數據,返回 PDOStatement 對象 
     * @param string $sql 
     * @return PDOStatement 
     */  
    public function getAll($sql) {  
        try {  
            if (!is_string($sql)) exit($this->getError(__FUNCTION__, __LINE__));  
            $pdo = Db::getDB();  
            $result = $pdo->query($sql);  
            $pdo = null;
            return $result;  
        } catch (PDOException $e) {  
            exit($e->getMessage());  
        }  
    }  

    /**
     * 檢查數據是否已經存在(依賴條件),可用於用戶註冊
     * @param string $tName 表名 
     * @param string $field 依賴的字段
     * @return bool
     */
    public function isExists($tName, $condition) {
        try {
            if (!is_string($tName) || !is_string($condition)) exit($this->getError(__FUNCTION__, __LINE__));
            $pdo = Db::getDB();
            $result = $pdo->query("SELECT COUNT(*) AS total FROM {$tName} WHERE {$condition}");
            foreach ($result as $v) {
                 $b = $v['total'];
            }
            $pdo = null;
            if ($b) {
                return true;
            } else {
                return false;
            }
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }

    /**
     * 檢查數據是否已經存在(依賴 int 主鍵)
     * @param string $tName 表名 
     * @param string $primary 主鍵
     * @param int $id 主鍵值
     * @return bool
     */
    public function isExistsByIntPrimary($tName, $primary, $id) {
        try {
            if (!is_string($tName) || !is_string($primary) || !is_int($id)) exit($this->getError(__FUNCTION__, __LINE__));
            $pdo = Db::getDB();
            $result = $pdo->query("SELECT COUNT(*) AS total FROM {$tName} WHERE {$primary} = ". $id);
            foreach ($result as $v) {
                 $b = $v['total'];
            }
            $pdo = null;
            if ($b) {
                return true;
            } else {
                return false;
            }
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }

    /** 
     * 預處理添加數據(推薦使用)
     * @param string $tableName  表格名 
     * @param array $fieldArr  字段名數組 
     * @param array $valArr  字段值數組 
     * @param bool  $mult  是否添加多條數據,如果是那麼 $valArr 爲二維數組
     * @return int  返回添加的記錄數,添加單條爲1,多條爲多
     */  
    public function insert($tableName, $fieldArr, $valArr, $mult=FALSE) {  
        try {  
            if (!is_string($tableName) || !is_array($fieldArr) || !is_array($valArr) || !is_bool($mult)) exit($this->getError(__FUNCTION__, __LINE__));  
            $pdo = Db::getDB();
            $fields = $this->formatArr($fieldArr);
            $arrCount = count($fieldArr);
            $mark = $this->formatMark($arrCount);
            $stmt = $pdo->prepare("INSERT INTO {$tableName} ({$fields}) VALUES ({$mark})");
            if (!$mult) {
                $row = $stmt->execute($valArr); // 添加單條數據
            } else {
                $row = 0;
                for ($i=0; $i<count($valArr); $i++) {
                    if ($stmt->execute($valArr[$i])) {
                        $row++;
                    }
                }
            }
            $pdo = null;  
            return $row;  
        } catch (PDOException $e) {  
            exit($e->getMessage());  
        }  
    }  

    /**
     * 預處理刪除(注:針對主鍵爲 INT 類型,推薦使用)
     * @param string $tName 表名
     * @param string $primary 主鍵字段
     * @param int or array or string $ids 如果是刪除一條爲 INT,多條爲 array,刪除一個範圍爲 string
     * @return int 返回受影響的行數
     */
    public function remove($tName, $primary, $ids, $mult=FALSE) {
        try {
            if (!is_string($tName) || !is_string($primary) || (!is_int($ids) && !is_array($ids) && !is_string($ids)) || !is_bool($mult)) exit($this->getError(__FUNCTION__, __LINE__));
            $pdo = Db::getDB();
            $stmt = $pdo->prepare("DELETE FROM {$tName} WHERE {$primary}=?");
            if (!$mult) {
                $stmt->bindParam(1, $ids);
                $row = $stmt->execute();
            } else {
                if (is_array($ids)) {
                    $row = 0;
                    foreach ($ids as $v) {
                        $stmt->bindParam(1, $v);
                        if ($stmt->execute()) {
                            $row++;
                        }
                    }
                } elseif (is_string($ids)) {
                    if (!strpos($ids, '-')) exit($this->getError(__FUNCTION__, __LINE__));
                    $split = explode('-', $ids);
                    if (count($split)!=2 || $split[0]>$split[1]) exit($this->getError(__FUNCTION__, __LINE__));
                    $i = null;
                    $count = $split[1]-$split[0]+1;
                    for ($i=0; $i<$count; $i++) {
                        $idArr[$i] = $split[0]++;
                    }
                    foreach ($idArr as $id) {
                        $idStr .= $id . ',';
                    }
                    $idStr = rtrim($idStr, ',');
                    $row = $pdo->exec("DELETE FROM {$tName} WHERE {$primary} in ({$idStr})");          
                }
            }
            return $row;
            $pdo = null;
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }

    /**
     * 返回單條數據
     * @param string $tName 表名
     * @param string $condition 條件
     * @param string or array $fields 返回的字段,默認是*
     * @return PDOStatement
     */
    public function getOne($tName, $condition, $fields="*") {
        try {
            if (!is_string($tName) || !is_string($condition) || !is_string($fields)) exit($this->getError(__FUNCTION__, __LINE__));
            $pdo = Db::getDB();
            $data = $pdo->query("SELECT {$fields} FROM {$tName} WHERE {$condition} LIMIT 1");
            $pdo = null;
            return $data;
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }

    /**
     * 返回全部數據
     * @param string $tName 表名
     * @param string $fields 返回字段,默認爲*
     * @param string $condition 條件
     * @param string $order 排序
     * @param string $limit 顯示個數
     * @return PDOStatement
     */
    public function fetchAll($tName, $fields='*', $condition='', $order='', $limit='') {
        try {
            if (!is_string($tName) || !is_string($fields) || !is_string($condition) || !is_string($order) || !is_string($limit)) exit($this->getError(__FUNCTION__, __LINE__));
            $fields = ($fields=='*' || $fields=='') ? '*' : $fields;
            $condition = $condition=='' ? '' : " WHERE ". $condition ;
            $order = $order=='' ? '' : " ORDER BY ". $order;
            $limit = $limit=='' ? '' : " LIMIT ". $limit;
            $pdo = Db::getDB();
            $re = $pdo->query("SELECT {$fields} FROM {$tName} {$condition} {$order} {$limit}");
            return $re;
        } catch (PDOException $e) {
            exit($e->getMessage());
        }
    }

    /** 
     * 格式化數組(表結構和值) 
     * @param array $field 
     * @param bool $isField 
     * @return string 
     */  
    private function formatArr($field, $isField=TRUE) {  
        if (!is_array($field)) exit($this->getError(__FUNCTION__, __LINE__));  
        if ($isField) {  
            foreach ($field as $v) {  
                $fields .= $v.',';  
            }  
        } else {  
            foreach ($field as $v) {  
                $fields .= '\''.$v.'\''.',';  
            }  
        }  
        $fields = rtrim($fields, ',');  
        return $fields;  
    }

    /**
     * 格式化問號,批量替換掉
     * @param int $count 數量
     * @return string 返回格式化後的字符串
     */
    private function formatMark($count) {
        if (!is_int($count)) exit($this->getError(__FUNCTION__, __LINE__));
        if ($count==1) return '?';
        for ($i=0; $i<$count; $i++) {
            $str .= '?,';
        }
        return rtrim($str, ',');
    }

    /** 
     * 錯誤提示 
     * @param string $fun 
     * @return string 
     */  
    private function getError($fun, $line) {  
        return __CLASS__  . '->' . $fun . '() line<font color="red">'. $line .'</font> ERROR!';  
    }  
}  
?>

config.inc.php 數據庫配置文件

<?php
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH', dirname(__FILE__)); // 網站根目錄
define('UPDIR', '/upload/'); // 上傳文件路徑
define('DB_DSN', 'mysql:host=localhost;dbname=ajaxtest');
define('DB_USER', 'root');
define('DB_PWD', 'root');
// 自動加載文件類
function __autoload($className) {
    require_once ROOT_PATH . '/includes/'. ucfirst($className) .'.class.php';
}
?>

article.php 文章調取處理文件

<?php
/**
* $Id: article.php
*/
require_once './config.inc.php';
$m = new Model();

$result = $m->fetchAll('article', '*', '', ''); // 調用model類中的fetchAll方法,查詢數據
echo '<table align="center" border="1" width="1100" style="border-collapse:collapse;font-size:14px;" bordercolor="#666">';
echo '<caption><h1>數據輸出</h1></caption>';
echo '<tr height="25"><th>ID</th><th>Title</th><th>Author</th><th>Source</th><th>Date</th></tr>';
foreach ($result as $v) {
    echo "<tr height='21'><td align='center'>{$v['id']}</td><td>{$v['title']}</td><td align='center'>{$v['author']}</td><td align='center'>{$v['source']}</td><td align='center'>{$v['date']}</td></tr>";
}
echo '<tr><td align="right" colspan="5">'.$page->fpage().'</td></tr>';
echo '</table>';
?>

數據庫設計

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章