热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PDO数据库基本操作和类的使用

#读数据库// 1.连接数据库,php是数据库名字// var_dump($pdo);检测连接结果// prepare 预处理sql语句的方法,生成处理对象// -> 是类的访问符号,访问类里的方法或

#


读数据库

  1. // 1.连接数据库,php是数据库名字
  2. // var_dump($pdo);检测连接结果
  3. // prepare 预处理sql语句的方法,生成处理对象
  4. // -> 是类的访问符号,访问类里的方法或成员
  5. // execute() 执行sql语句(读/写)
  6. // print_r($data);
  7. try {
  8. $pdo = new PDO('mysql:host=localhost;dbname=song','root','root');
  9. } catch (\Throwable $th) {
  10. echo '数据库连接失败' . $e->getMessage();
  11. }
  12. $pre = $pdo -> prepare('SELECT * FROM `user`');
  13. $exe = $pre -> execute();
  14. $data = $pre -> fetchAll();
  15. ?>
  16. <table width="200" border="1">
  17. foreach ($data as $key => $value) {
  18. ?>
  19. $value['name'] ?>td>
  20. $value['add_time']?>td>
  21. $value['status']?>td>
  22. tr>
  23. } ?>
  24. tr>
  25. table>

读数据库到指点变量

  1. try{
  2. $pdo = new PDO('mysql:host=127.0.0.1;dbname=song','root','root');
  3. }catch(PDOException $e){
  4. // 抛出错误,错误是你可以定义的
  5. echo '数据库连接失败' . $e->getMessage();
  6. }
  7. $pre = $pdo -> prepare('SELECT * FROM `user`');
  8. $exe = $pre -> execute();
  9. // 把mysql读取出来的这一列数据,放到$name变量中
  10. $pre -> bindColumn('name',$name);
  11. $pre -> bindColumn('age',$age);
  12. while ($pre->fetch(PDO::FETCH_ASSOC)){
  13. echo '姓名:' . $name;
  14. echo '年龄:' . $age;
  15. echo '
    '
    ;
  16. }

insert防止sql注入攻击

第一种写法,占位符 :

  1. $sql = 'INSERT INTO `user` SET `account`=:account, `password`=:password,`name`=:name,`phone`=:phone';
  2. $pre = $pdo -> prepare($sql);
  3. // bindParam 参数绑定
  4. // 1. 站位符名
  5. // 2. 要给值得变量,绑定上,现在可以没值
  6. // 3. 常量,pdo预定义常量,可以设置这个值的类型 ,访问方式: PDO:: ,类里的常量访问方式
  7. $pre -> bindParam ('account',$account, PDO::PARAM_STR);
  8. $pre -> bindParam ('password',$password, PDO::PARAM_STR);
  9. $pre -> bindParam ('name',$name, PDO::PARAM_STR);
  10. $pre -> bindParam ('phone',$phone, PDO::PARAM_INT);
  11. $account = 'xiaobian30';
  12. $password = md5('123456');
  13. $name = '小编30';
  14. $phone = 1384382299;
  15. $exe = $pre -> execute();
  16. if(!$exe){
  17. // 错误信息打印出来
  18. print_r($pre->errorInfo());
  19. }else{
  20. // rowCount 获取是否成功。影响数量
  21. echo '插入数量'.$pre -> rowCount();
  22. echo '
    '
    ;
  23. // lastInsertId 获取这次自增的ID,类是用连接的类$pdo
  24. echo '最后插入ID'.$pdo -> lastInsertId();
  25. }
  26. ?>

第二种写法 占位符?

  1. $sql = 'INSERT INTO `user` SET `account`=?, `password`=?,`name`=?,`phone`=?';
  2. $pre = $pdo -> prepare($sql);
  3. $pre -> bindParam (1,$account, PDO::PARAM_STR);
  4. $pre -> bindParam (2,$password, PDO::PARAM_STR);
  5. $pre -> bindParam (3,$name, PDO::PARAM_STR);
  6. $pre -> bindParam (4,$phone, PDO::PARAM_STR);
  7. $account = 'xiaobian30';
  8. $password = md5('123456');
  9. $name = '小编30';
  10. $phone = 1384382299;
  11. $exe = $pre -> execute();
  12. if(!$exe){
  13. // 错误信息打印出来
  14. print_r($pre->errorInfo());
  15. }else{
  16. // rowCount 获取是否成功。影响数量
  17. echo '插入数量'.$pre -> rowCount();
  18. echo '
    '
    ;
  19. // lastInsertId 获取这次自增的ID,类是用连接的类$pdo
  20. echo '最后插入ID'.$pdo -> lastInsertId();
  21. }
  22. ?>

第三种写法

  1. //明文占位,数组传值
  2. $sql = 'INSERT INTO `user` SET `account`=:account, `password`=:password,`name`=:name,`phone`=:phone';
  3. $pre = $pdo -> prepare($sql);
  4. $exe = $pre -> execute([
  5. ':account' => 'xiaobian33',
  6. ':password' => md5(123456),
  7. ':name' => '小编33',
  8. ':phone' => 13843812277
  9. ]);
  10. if(!$exe){
  11. // 错误信息打印出来
  12. print_r($pre->errorInfo());
  13. }else{
  14. // rowCount 获取是否成功。影响数量
  15. echo $pre -> rowCount();
  16. echo '
    '
    ;
  17. // lastInsertId 获取这次自增的ID,类是用连接的类$pdo
  18. echo $pdo -> lastInsertId();
  19. }
  20. ?>

数据库设置编码

  1. header ('content-type:text/html;charset=utf-8');
  2. //new PDO('mysql:host=127.0.0.1;dbname=php','root','root', array(PDO::MYSQL_ATTR_INIT_COMAND => "SET NAMES 'utf-8'"));
  3. try{
  4. $pdo = new PDO('mysql:host=127.0.0.1;dbname=song','root','root');
  5. }catch(PDOException $e){
  6. // 抛出错误,错误是你可以定义的
  7. echo '数据库连接失败' . $e->getMessage();
  8. }
  9. $pdo->query('SET NAMES utf8');
  10. ?>

数据库关闭PDO


  • 方法一 $pdo = null;
  • 方法二 unset($pdo);

  1. class Teacher{
  2. public $name;
  3. public $age;
  4. // 构造方法(人事部)
  5. public function __construct($n,$age){
  6. // $this 代表 本类(Teacher)
  7. $this->name = $n;
  8. // $this->age ===等于 public $age;
  9. $this->age = $age;
  10. // 它可以访问 本类里的 成员属性和成员方法
  11. $this->jh();
  12. }
  13. public function jh(){
  14. return '我是php中文网的老师';
  15. }
  16. public function code(){
  17. return '我会写代码';
  18. }
  19. // 析构方法(人事部),离职的时候执行的
  20. // 所有代码执行完以后,才执行,可以用做日志记录
  21. public function __destruct(){
  22. echo '我离职了';
  23. }
  24. }
  25. // new 类的时候,就把成员变量的值传进去
  26. $ouyang = new Teacher('欧阳克','38');
  27. echo $ouyang->name;
  28. echo '
    '
    ;
  29. echo $ouyang->age;
  30. echo '
    '
    ;
  31. ?>


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 开发笔记:对称加密详解,以及JAVA简单实现
     (原)常用的加密有3种1、正向加密,如MD5,加密后密文固定,目前还没办法破解,但是可以能过数据库撞库有一定概率找到,不过现 ... [详细]
  • PHP连接MySQL的2种方法小结以及防止乱码【PHP】
    后端开发|php教程PHP,MySQL,乱码后端开发-php教程PHP的MySQL配置报错信息:ClassmysqlinotfoundinAnswer:1.在confphp.ini ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • STM32 IO口模拟串口通讯
    转自:http:ziye334.blog.163.comblogstatic224306191201452833850647前阵子,调项目时需要用到低波 ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
  • 微信公众号:内核小王子关注可了解更多关于数据库,JVM内核相关的知识;如果你有任何疑问也可以加我pigpdong[^1]jvm一行代码是怎么运行的首先,java代码会被编译成字 ... [详细]
  • 图解 Google V8 # 19 :异步编程(二):V8 是如何实现 async/await 的?
    说明图解GoogleV8学习笔记前端异步编程的方案史1、什么是回调地狱?如果在代码中过多地使用异步回调函数,会将整个代码逻辑打乱,从 ... [详细]
author-avatar
新手村一霸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有