1、實(shí)現(xiàn)效果調(diào)用實(shí)現(xiàn)數(shù)據(jù)增刪改查封裝
?文章來源:http://www.zghlxwxcb.cn/news/detail-643503.html
2、創(chuàng)建數(shù)據(jù)表?
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
?文章來源地址http://www.zghlxwxcb.cn/news/detail-643503.html
3、index.php 入口定義數(shù)據(jù)庫賬號(hào)密碼
<?php
//定義當(dāng)前請(qǐng)求模塊
define("MODULE",'index');
//定義數(shù)據(jù)庫
define('DB_HOST','localhost');//數(shù)據(jù)庫地址
define('DB_DATABASE','aaa');//數(shù)據(jù)庫
define('DB_USER','root');//數(shù)據(jù)庫賬號(hào)
define('DB_PWD','root');//數(shù)據(jù)庫密碼
require "./core/KJ.php";
4、KJ.php引入基類
//自動(dòng)加載文件
public static function _autoload($className){
switch ($className){
//自動(dòng)加載控制器
case substr($className,-3)=='Crl':
$path= CONTROLLER.'/'.$className.'.php';
if(is_file($path)) include $path;
break;
//自動(dòng)加載基類
case substr($className,-4)=='Base':
$path= KJ_CORE.'/base/'.$className.'.php';
if(is_file($path)) include $path;
break;
default :
break;
}
}
5、基類使用pdo封裝增刪改查 ModelBase.php
<?php
class ModelBase
{
public $pdo = NULL;
public function __construct(){
$this->_connect();
}
private function _connect(){
$host = DB_HOST;
$db = DB_DATABASE;
$user = DB_USER;
$pass = DB_PWD;
$dsn = "mysql:host=$host;dbname=$db;charset=utf8";
try {
$this->pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
} catch (PDOException $e) {
die("數(shù)據(jù)庫連接失敗: " . $e->getMessage());
}
}
public function insert($table, $data) {
// 準(zhǔn)備SQL語句
$fields = implode(', ', array_keys($data));
$values = ':' . implode(', :', array_keys($data));
$sql = "INSERT INTO $table ($fields) VALUES ($values)";
// 綁定參數(shù)并執(zhí)行SQL語句
$stmt = $this->pdo->prepare($sql);
foreach ($data as $key => $value) {
$stmt->bindValue(':' . $key, $value);
}
return $stmt->execute();
}
public function delete($table, $condition, $params = [])
{
$sql = "DELETE FROM $table WHERE $condition";
$stmt = $this->pdo->prepare($sql);
foreach ($params as $key => $value) {
$stmt->bindValue(":$key", $value);
}
$stmt->execute();
return $stmt->rowCount();
}
public function update($table, $data, $condition, $params = [])
{
$sql = "UPDATE $table SET ";
$set = [];
foreach ($data as $key => $value) {
$set[] = "$key = :$key";
}
$sql .= implode(', ', $set);
$sql .= " WHERE $condition";
$stmt = $this->pdo->prepare($sql);
foreach ($data as $key => $value) {
$stmt->bindValue(":$key", $value);
}
foreach ($params as $key => $value) {
$stmt->bindValue($key, $value);
}
$stmt->execute();
return $stmt->rowCount();
}
public function select($table, $condition = '', $params = [])
{
$sql = "SELECT * FROM $table";
if ($condition) {
$sql .= " WHERE $condition";
}
$stmt = $this->pdo->prepare($sql);
foreach ($params as $key => $value) {
$stmt->bindValue($key, $value);
}
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
6、indexCrl.php控制器調(diào)用
class indexCrl{
public function index(){
$model= new ModelBase();
// 插入數(shù)據(jù)
$data = [
'age' => 12,
'name' => '小明',
];
$model->insert('test', $data);
// 查詢數(shù)據(jù)
$result = $model->select('test', 'name = :value', [':value' => '小明']);
var_dump($result);
// 更新數(shù)據(jù)
$data = [
'age' => '13',
];
// 更新數(shù)據(jù)
$model->update('test', $data, 'id = :id', [':id' => 1]);
// 刪除數(shù)據(jù)
$model->delete('test', 'id = :id', ['id' => 1]);
}
}
7、完整KJ.php代碼
<?php
final class KJ{
public static function run(){
//定義常量
self::_set_const();
//創(chuàng)建模塊目錄
self::_mk_module();
//類自動(dòng)加載
spl_autoload_register(array(__CLASS__,'_autoload'));
//運(yùn)行框架
self::_run();
}
//運(yùn)行控制器中方法
public static function _run(){
$c=strtolower(isset($_GET['c'])?$_GET['c']:'index');
$a=strtolower(isset($_GET['a'])?$_GET['a']:'index');
$c.='Crl';
if(!class_exists($c)){
die("控制器".$c."不存在");
}
$obj=new $c();
if(!method_exists($obj,$a)){
die("控制器".$c."下".$a."方法不存在");
}
$obj->$a();
}
//自動(dòng)加載文件
public static function _autoload($className){
switch ($className){
//自動(dòng)加載控制器
case substr($className,-3)=='Crl':
$path= CONTROLLER.'/'.$className.'.php';
if(is_file($path)) include $path;
break;
//自動(dòng)加載基類
case substr($className,-4)=='Base':
$path= KJ_CORE.'/base/'.$className.'.php';
if(is_file($path)) include $path;
break;
default :
break;
}
}
//定義常量
public static function _set_const(){
//獲取框架核心路徑 都替換/以便兼容linux
$path=str_replace('\\','//',__FILE__);
//定義常量
define("KJ_CORE",dirname($path)); //框架核心路徑
define('ROOT_PATH',dirname(KJ_CORE));//項(xiàng)目根目錄
define('MODULE_PATH',ROOT_PATH.'/'.MODULE);//模塊
define('CONTROLLER',MODULE_PATH.'/controller');//定義控制器
define('MODEL',MODULE_PATH.'/model');//定義模型
define('VIEW',MODULE_PATH.'/view');//定義顯示成
}
//自動(dòng)創(chuàng)建模塊目錄
public static function _mk_module(){
$arr=[
MODULE_PATH,
CONTROLLER,
MODEL,
VIEW,
];
foreach ($arr as $v){
is_dir($v) || mkdir($v,0777,true);
}
}
}
KJ::run();
到了這里,關(guān)于PHP最簡單自定義自己的框架數(shù)據(jù)庫封裝調(diào)用(五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!