Blogger Information
Blog 24
fans 1
comment 0
visits 21763
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PDO增删改查--2019年3月21日
王先生的博客
Original
662 people have browsed it

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

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post