博客列表 >PDO增删改查--2019年3月21日

PDO增删改查--2019年3月21日

王先生的博客
王先生的博客原创
2019年03月26日 06:03:24661浏览

创建了五个方法,分别是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;

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

1.jpg

查询


2.jpg

添加


3.jpg

修改


4.jpg


删除




笔记:


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按钮 可以实现输入输出的,但是时间不够了,后期我再补全代码吧  老师课上所讲内容,已经基本消化理解了 , 自己再增加练习与拓展就好   感谢老师

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议