目标如下:
设计表结构:
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代码如下:
/*
设计一个类: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 "
sql语句执行失败,请参考如下信息:";
echo "
错误代号:" . mysql_errno(); //获取错误代号
echo "
错误信息:" . mysql_error(); //获取错误提示内部
echo "
错误语句:" . $sql;
die();
}
return $result; //返回的是“执行的结果”
}
}
?>
第一步 先写模型
UserModel.class.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){
//......
}
}
第二步 写控制器
require './UserModel.class.php';
//实例化模型类,并从中获取2份数据:
$obj_user = new UserModel();
$data1 = $obj_user->GetAllUser(); //是一个二维数组
$data2 = $obj_user->GetUserCount(); //是一个数字
//载入视图文件,以显示该2份数据:
include './showAllUser_view.html';
?>
第三步 写入视图
网页标题
.t1{color:red;}
.t2{background:#cccccc}
用户列表:
//我们一般不这么做:
/*
echo "";
foreach( $result as $key => $rec ){
echo "";
echo "" . $rec['user_name'] . "";
echo "" . $rec['age'] . "";
echo "{$rec['edu']}";
echo "{$rec['xingqu']}";
echo "{$rec['from']}";
echo "{$rec['reg_time']}";
echo "";
echo "删除";
echo "";
echo "";
}
echo "";
*/
//而是如下做法:
?>
foreach($data1as $key => $rec )//找到蓝色部分$data1你会明白的
{
?>
}
?>
当前用户总数:
注解:
$data1 $data2数据如图所示
视图写法
拼字符串写php外围代码