创建了五个方法,分别是con select update delete insert 实现了数据库的链接 增删改查 使用prepare execute setFetchMode等方法,实现了对数据库的操作,但是由于时间原因, 没有完善代码,可以增加很多功能,包括安全性与判断操作上,这些代码还可以后期继续优化,目前只实现了基本功能
实例
<?php header('content-type:text/html;charset=utf-8'); //数据库连接 function con(){ $flone='mysql:host=127.0.0.1;dbname=demo;charset=utf8;port=3306'; $fltwo='root'; $flthree='root'; try{ $p=new PDO($flone,$fltwo,$flthree); return $p; } catch(PDOException $e){ echo '数据库连接出错了'; print_r($e->getMessage()); exit; } } // 查询$value1,$table,$num function select(){ $c=con(); $sql='SELECT * FROM `user` '; var_dump($c); echo '<hr>'; var_dump($sql); echo '<hr>'; // $sql='SELECT '; // $sql.=$value1; // $sql.=' FROM '; // $sql.=$table; // $sql.=' WHERE '; // $sql.='`id` = '; // $sql.=$num; $a=$c->prepare($sql); $a->execute(); $a->setFetchMode(PDO::FETCH_ASSOC); $ret=$a->fetchAll(); return $ret; } echo '<pre>'; $s=select(); print_r($s); //修改 function update(){ $c=con(); var_dump($c); echo '<hr>'; $sql='UPDATE `user` SET `name`=? WHERE `id`=?'; $a=$c->prepare($sql); $name='我123'; $id=9; $a->bindValue(1,$name); $a->bindValue(2,$id); $insert_id =$a->execute(); if($insert_id) { echo '修改成功'.'<br>'; } else { echo '修改失败'.'<br>'; } } // $u=update(); // 删除 function delete(){ $c=con(); $sql='DELETE FROM `user` WHERE `id`=?'; $a=$c->prepare($sql); $id=11; $a->bindValue(1,$id); $insert_id =$a->execute(); if($insert_id) { echo '删除成功'.'<br>'; } else { echo '删除失败'.'<br>'; } } //$d=delete(); // 增加 function insert(){ $c=con(); $sql='INSERT INTO `user` (`name`,`age`,`sex`,`usename`,`password`,`phone`,`email`,`province`,`country`,`display`) VALUES (?,?,?,?,?,?,?,?,?,?)'; echo ($sql); $a=$c->prepare($sql); $name='我'; $age=100; $sex=1; $usename='我'; $password='我'; $phone=12345; $email='1234@qq.com'; $province='山东'; $country='中国'; $display=0; $a->bindValue(1,$name); $a->bindValue(2,$age); $a->bindValue(3,$sex); $a->bindValue(4,$usename); $a->bindValue(5,$password); $a->bindValue(6,$phone); $a->bindValue(7,$email); $a->bindValue(8,$province); $a->bindValue(9,$country); $a->bindValue(10,$display); $a->execute(); $insert_id = $c->lastInsertId(); if($insert_id) { echo '新增成功'.'<br>'; } else { echo '新增失败'.'<br>'; } } // $s=insert(); $p=null; ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
查询
添加
修改
删除
笔记:
2019年3月21日
1:PDO连接,是直接连接数据库
1-1:new 连接创建一个类
1-2:类 是很多方法组成的
1-3:PDO连接有三个参数
第一个参数: 字符串 拼装方法
mysql:host=127.0.0.1;dbname=demo;charset=utf8;port=3306
mysql是数据库的类型 host 是ip地址 dbname是数据库名 charser是字符集 port 是端口号
第二个参数:数据库账号
第三个参数:数据库密码
1-4:PDO连接后,返回数据类型(对象),连接成功后,就像软件一样,看到表了
例:
$dsn='mysql:host=127.0.0.1;dbname=demo;charset=utf8;post=3306';
$dbname='root';
$dbpw='root';
2:try catch 捕捉到执行期的任何错误
2-1: exit 停止php往下执行,测试时使用的多
2-2:getMessage 方法获取错误信息
2-3:try是执行体,catch是如果try出错了,然后输出错误信息
例:
try{
$p=new PDO($dsn,$dbname,$dbpw);
}catch(PDOException $e){
print_r($e->getMessage());
exit;
}
3:SQL语句执行方法
3-1:musql语句,都可以直接执行
$sql="SELECT * FROM `user` WHERE `id`=3";
3-2:第一种执行方法
例:
$ret=$p->query($sql);
$arr=[];
foreach($ret as $row){
$arr[]=$row;
}
print_r($arr);
query 执行sql语句
->符号,是类的访问符,可以请求类里面的方法,固定的符号,不允许改变
返回结果,不是字符串,我们用打印方式
结果集,不能直接输出,输出后是对象
结果集,可以用数组循环方式
循环拿到数据有两种数组,一种是关联,一种是索引
3-3:第二种执行方法
例:
$a=$p->prepare($sql);
$a->execute();
$a->setFetchMode(PDO::FETCH_ASSOC);
$ret=$a->fetchAll();
print_r($ret);
把要处理的mysql语句,放到prepare方法里,返回一个待处理结果T$a
execute 执行一条预处理语句,$a是待处理结果,使用execute方法执行
setFetchMode 为语句设置默认的获取模式
执行得到结果后,我们要改变结果的类型
PDO::FETCH_ASSOC 把结果转换成数组
fetchAll 返回一个包含结果集中所有行的数组
3-3-1:还可以绑定值,让用户提供输入条件
例:
$sql="SELECT `id`,`name`,`position` FROM `staff` WHERE `id`=:id";
$a=$p->prepare($sql);
$a->bindValue('id',$id,PDO::PARAM_INT);
$a->bindParam('id',$id,PDO::PARAM_INT);
$a->execute();
$a->setFetchMode(PDOFETCH_ASSOC);
$ret=$a->fetchAll();
print_r($ret);
sql语句中:id 是占位符
bindValue 把绑定的数据传入
bindParam 绑定一个参数到指定的变量名
区别:
1:bindValue的第二个参数可以是实际值,也可以是变量;bindParam的第二个参数必须是变量,不能是具体的值.
2:bindParam可以先绑定变量,然后在给变量赋值,也就是绑定和赋值没有先后顺序;bindValue必须先声明变量,然后再绑定
4:可以创建连接方法 重复使用,减少代码量
例:
function con(){
$dsn='mysql:host=127.0.0.1;dbname=demo;charset=utf8;port=3306';
$dbname='root';
$dbpw='root';
tye{
$p=new PDO($dsn,$dbname,$dbpw);
}catch(PDOException $e){
print_r($e->getMessage());
exit;
}
return $p;
}
5:查询数据 方法
例:
function select($field='*',$table,$where='',$order='',$limit=''){
$c=con();
$sql='SELECT '; //组装select关键词
//如果返回值传值,才进行组装 默认是*
if(!empty($field)){
$sql.=$fidle; //组装查询返回字段
}
$sql.=' FROM '; //组装表名关键词
$sql.=$table; //组装表名
//empty 判断变量是否为空
// ! 取反
//!empty($where)判断变量不为空,进入if
//判断是否传条件,传了条件进行条件组装
if(!empty($where)){
$sql.=' WHERE '; //组装条件关键词
$sql.=$where; //组装条件
}
//判断排序
if(!empty($order)){
$sql.=' ORDER BY ';
$sql.=$order;
}
//判断数量
if(iempty($limit)){
$sql.=' LIMIT ';
sql.$limit;
}
//$sql='SELECT * FROM `user` WHERE `id`=3';
//预处理sql语句
$a=$c->prepare($sql);
//执行sql语句 判断是否执行sql语句成功
//为什么要判断,别人使用咱们写好的方法,可能会传一些无法估计参数,导致查询失败
if($a->execute()){
//当查询结果后,结果集是没有数据的
//用rowCount方法,判断结果集是否有结果,有结果我们才返回结果
if($a->rowCount()){
//设置模式
$a->setFetchMode(PDO::FETCH_ASSOC);
//结果集
$ret=$a->fetchAll();
//返回结果集
return $ret;
}else{
return false;
}
}else
{
return false;
}
}
$s=select('`id`,`name`,`position`','`user`','`id`=1');
print_r($s);
总结:代码还是要多敲,通过练习,思路越来越清晰,单词及各种方法的使用也也熟悉了,但是速度上还是很慢,还是要加强练习,代码内容上也有很多需要添加的,只完成了基本功能,各种判断等还没有加上, 本来是打算加上html代码 列出表格与button按钮 可以实现输入输出的,但是时间不够了,后期我再补全代码吧 老师课上所讲内容,已经基本消化理解了 , 自己再增加练习与拓展就好 感谢老师