mvc典型案例分析笔记:数据库的添加数据

目标如下:

 

设计表结构:
create  table  user_list(
    user_id int auto_increment primary key,
    user_name varchar(10),
    user_pass char(32),     #md5加密,结果固定32位
    age tinyInt unsigned,
    edu enum('小学','中学','大学','硕士','博士'),
    xingqu set('排球','篮球','足球','中国足球','地球'),
   `from` enum('东北','华北','西北','华东','华南','华西'), 
    reg_time datetime
);

图示如下:

 

 

 借助于mysql工具操作类

MySQLDB.class.php代码如下:

<?php
/*
设计一个类:mysql数据库操作类
设计目标:
1,该类一实例化,就可以自动连接上mysql数据库;
2,该类可以单独去设定要使用的连接编码(set  names  XXX)
3,该类可以单独去设定要使用的数据库(use  XXX);
4,可以主动关闭连接;
*/

class MySQLDB{

    private $link = null;    //用于存储连接成功后的“资源”

    //定义一些属性,以存储连接数据库的6项基本信息
    private $host;
    private $port;
    private $user;
    private $pass;
    private $charset;
    private $dbname;

    //实现单例第2步:用于存储唯一的单例对象:
    private static $instance = null;
    //实现单例第3步:
    static  function GetInstance($config){
        //if( !isset( self::$instance )){    //还没有该对象
        if( !(self::$instance instanceof self) ){    //这一行代替上一行的判断,更常见
            self::$instance = new self($config); //就创建并存起来
        }
        return self::$instance;
    }
    //实现单例第4步:私有化这个克隆的魔术方法
    private function __clone(){}

    //实现单例第1步:
    private function __construct($config){
        //先将这些基本的连接信息,保存起来!
        $this->host = !empty($config['host']) ? $config['host'] : "localhost";    //考虑空值情况,使用默认值代替
        $this->port = !empty($config['port']) ? $config['port'] : "3306" ;
        $this->user = !empty($config['user']) ? $config['user'] : "root" ;
        $this->pass = !empty($config['pass']) ? $config['pass'] : "root" ;
        $this->charset = !empty($config['charset']) ? $config['charset'] : "utf8" ;
        $this->dbname = !empty($config['dbname']) ? $config['dbname'] : "php39" ;
        
        //然后连接数据库!
        $this->link  =  mysql_connect("{$this->host}:{$this->port}", "{$this->user}", "{$this->pass}") 
            or die("连接失败");

        //设定编码
        //mysql_query("set names {$config['charset']}");
        $this->setCharset( $this->charset );//这一行代替上一行

        //选定要使用的数据库名
        //mysql_query("use  {$config['dbname']}");
        $this->selectDB( $this->dbname );//这一行代替上一行
    }
    //可以设定要使用的连接编码
    function setCharset( $charset ){
        mysql_query("set names $charset", $this->link);
    }
    //可以设定要使用的数据库
    function selectDB($dbname){
        mysql_query("use  $dbname", $this->link);
    }
    //可关闭连接
    function closeDB(){
        mysql_close($this->link);
    }

    //这个方法为了执行一条增删改语句,它可以返回真假结果
    function exec($sql){
        
        $result = $this->query($sql);
        return true;    //因为是增删改语句,直接返回true就可以
    }
    
    //这个方法为了执行一条返回一行数据的语句,它可以返回一维数组
    //数组的下标,就是sql语句中的取出的字段名;
    function GetOneRow($sql){
        
        $result = $this->query($sql);
        //这里开始处理数据,以返回数组。此时$result是一个结果集(单行数据)
        $rec = mysql_fetch_assoc( $result );//取出第一行数据(其实应该只有这一行)
        mysql_free_result( $result );    //提前释放资源(销毁结果集),否则需要等到页面结束才自动销毁
        return $rec;
    }
    
    //这个方法为了执行一条返回多行数据的语句,它可以返回二维数组
    function GetRows($sql){
        
        $result = $this->query($sql);
        //这里开始处理数据,以返回数组。此时$result是一个结果集(且是多行数据)
        $arr = array();    //空数组,用于存放要返回的结果数组(二维)
        while ( $rec = mysql_fetch_assoc( $result ) ){
            $arr[] = $rec;    //此时,$arr就是二维数组了!
        }
        mysql_free_result( $result );    //提前释放资源(销毁结果集),否则需要等到页面结束才自动销毁
        return $arr;
    }
    
    //这个方法为了执行一条返回一个数据的语句,它可以返回一个直接值
    //这条语句类似这样:select  count(*) as c  from  user_list
    function GetOneData($sql){
        
        $result = $this->query($sql);
        //这里开始处理数据,以返回一个数据(标量数据)!
        $rec = mysql_fetch_row( $result );    //这里也可以使用fetch_array这个函数!
                                            //这里得到$rec仍然是一个数组,但其类似这样:
                                            //  array ( 0=> 5 );或者 array( 0=>'user1');
        $data = $rec[0];
        mysql_free_result( $result );    //提前释放资源(销毁结果集),否则需要等到页面结束才自动销毁
        return $data;
    }

    //这个方法用于执行任何sql语句,并进行错误处理,或返回执行结果;
    private function query( $sql ){
        $result = mysql_query($sql, $this->link);
        if( $result === false){
            //对任何sql语句,执行失败,都需要处理这种失败情况:
            echo "<p>sql语句执行失败,请参考如下信息:";
            echo "<br />错误代号:" . mysql_errno();    //获取错误代号
            echo "<br />错误信息:" . mysql_error();    //获取错误提示内部
            echo "<br />错误语句:" . $sql;
            die();
        }
        return $result;    //返回的是“执行的结果”
    }

}
?>

第一步 先写模型

UserModel.class.php

<?php
require './MySQLDB.class.php';
class UserModel{
    function GetAllUser(){
        $config = array(
            'host' => "localhost",
            'port' => 3306,
            'user' => "root",
            'pass' => "root",
            'charset' => "utf8",
            'dbname' => "php39"
        );
        $sql = "select * from user_list;";//运用php操作mysql知识
        $db = MySQLDB::GetInstance($config);
        $data = $db->GetRows($sql);
        return $data;
    }

    function GetUserCount(){
        $config = array(
            'host' => "localhost",
            'port' => 3306,
            'user' => "root",
            'pass' => "root",
            'charset' => "utf8",
            'dbname' => "php39"
        );
        $sql = "select count(*) as c from user_list;";//查询总数
        $db = MySQLDB::GetInstance($config);
        $data = $db->GetOneData($sql);
        return $data;
    }

    function GetUserInfoById($id){
        //......
    }
    function GetUserInfoByUserName($name){
        //......
    }
}

第二步 写控制器

<?php
require './UserModel.class.php';

//实例化模型类,并从中获取2份数据:
$obj_user = new UserModel();
$data1 = $obj_user->GetAllUser();    //是一个二维数组
$data2 = $obj_user->GetUserCount();    //是一个数字

//载入视图文件,以显示该2份数据:
include './showAllUser_view.html';
?>

 第三步  写入视图

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>网页标题</title>
    <meta name="keywords" content="关键字列表" />
    <meta name="description" content="网页描述" />
    <link rel="stylesheet" type="text/css" href="" />
    <style type="text/css">
        .t1{color:red;}
        .t2{background:#cccccc}
    </style>
    <script type="text/javascript"></script>
</head>
<body>
用户列表:

<?php
//我们一般不这么做:
/*
echo "<table border='1'>";
foreach( $result as  $key => $rec ){
    echo "<tr>";
    echo "<td>" . $rec['user_name'] . "</td>";
    echo "<td>" . $rec['age'] . "</td>";
    echo "<td>{$rec['edu']}</td>";
    echo "<td>{$rec['xingqu']}</td>";
    echo "<td>{$rec['from']}</td>";
    echo "<td>{$rec['reg_time']}</td>";
    echo "<td>";
    echo "<a href='?id={$rec['user_id']}' οnclick='return queren()'>删除</a>";
    echo "</td>";
    echo "</tr>";
}
echo "</table>";
*/
//而是如下做法:
?>
<table border='1'>
    <?php
    foreach( $data1 as  $key => $rec )//找到蓝色部分$data1你会明白的
    {
    ?>
    <tr>
        <td><?php echo $rec['user_name']; ?></td>
        <td class='t1'><?php echo $rec['age']; ?></td>
        <td><?php echo $rec['edu']; ?></td>
        <td class='t2'><?php echo $rec['xingqu']; ?></td>
        <td><?php echo $rec['from']; ?></td>
        <td><?php echo $rec['reg_time']; ?></td>
        <td><a href='?id=6' οnclick='return queren()'>删除</a></td>
    </tr>
    <?php
    }
    ?>
</table>
<br />
当前用户总数:<?php echo $data2;?>
</body>
</html>

注解:

$data1 $data2数据如图所示

视图写法

拼字符串写php外围代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值