博客列表 >php之预处理(msqli和PDO)

php之预处理(msqli和PDO)

熟悉的新风景
熟悉的新风景原创
2020年05月22日 21:31:251194浏览

哎,身为一个穷逼,以前自学在网上找的好几年前的视频,学的mysql,可惜现在已经不适用了,现在更新一下基础知识,本节介绍一个同mysqli中的面向对象和面向过程以及PDO预处理的格式,下一节做一下后台数据显示页面以便复习一下知识点,ok,就这样,至于概念什么的,请自行百度

mysqli预处理

  1. <?php
  2. $servername = '127.0.0.1';
  3. $username = 'root';
  4. $password = 'weicunbin123';
  5. $dbname = 'testguest';
  6. // 创建连接
  7. $conn = new mysqli($servername, $username, $password, $dbname);
  8. // 检测连接
  9. if ($conn->connect_error) {
  10. die("连接失败: " . $conn->connect_error);
  11. }
  12. $conn->set_charset( "utf8" ); // 设置字符集
  13. // 预处理语句,每刷新一次数据库sql语句执行一次
  14. // 增
  15. // 给数据库准备预处理语句,(sql语句,原本需要的文字用 ‘?’ 表示)
  16. $stmt = $conn->prepare("INSERT INTO tg_message (tg_touser,tg_centent) VALUES (? , ?)");
  17. //绑定参数,第一个为类型,其他的与? 一一对应
  18. $stmt->bind_param("ss", $param1,$param2);
  19. /*
  20. * bind_param第一个参数
  21. * i 整型integer
  22. * d 双精度浮点型double
  23. * s 字符串string
  24. * b 是一个blob和将发送数据包
  25. */
  26. // 设置参数并执行
  27. $param1 = 'value1';
  28. $param2 = 'value2';
  29. // 执行
  30. $stmt->execute();
  31. echo "增:最后ID:".$stmt->insert_id."<br>";
  32. echo "增:影响行数:".$stmt->affected_rows."<br>";
  33. // 删
  34. $stmt = $conn -> prepare("DELETE FROM tg_message WHERE tg_id = ?");
  35. $stmt -> bind_param('i', $param);
  36. $param = 1;
  37. $stmt -> execute();
  38. echo "删:影响行数:".$stmt->affected_rows."<br>";
  39. // 改
  40. $stmt = $conn -> prepare("UPDATE tg_message SET tg_touser = ? WHERE tg_id = ?");
  41. $stmt -> bind_param('si', $centent,$id);
  42. $centent = '这是修改后的文字';
  43. $id = 9;
  44. $stmt -> execute();
  45. echo "改:影响行数:".$stmt->affected_rows."<br>";
  46. // 查
  47. $stmt = $conn -> prepare("SELECT tg_id,tg_touser FROM tg_message WHERE tg_id > ?");
  48. $stmt -> bind_param('i',$num);
  49. $num = 15;
  50. $stmt -> execute();
  51. echo "查:记录总数:".$stmt->num_rows;
  52. // 显示搜索到的结果
  53. $stmt -> bind_result ( $tg_id,$tg_touser );//这里参数跟你查询的字段显示个数需要对应起来!
  54. while ( $stmt -> fetch ()) {
  55. echo $tg_id .'=>'. $tg_touser .'<br>';
  56. }
  57. // 销毁结果集
  58. $stmt->free_result();
  59. $stmt->close();
  60. $conn->close();
  61. ?>

PDO预处理

  1. <?php
  2. /*
  3. * @Descripttion:
  4. * @version:
  5. * @Author: wei
  6. * @Date: 2020-04-05 12:23:50
  7. * @LastEditors: wei
  8. * @LastEditTime: 2020-04-05 14:35:00
  9. */
  10. $dbms='mysql'; //数据库类型
  11. $host='localhost'; //数据库主机名
  12. $dbName='testguest'; //使用的数据库
  13. $user='root'; //数据库连接用户名
  14. $pass='weicunbin123'; //对应的密码
  15. $dsn="$dbms:host=$host;dbname=$dbName";
  16. // 连接数据库
  17. try {
  18. $pdo = new PDO($dsn, $user, $pass); //初始化一个PDO对象
  19. echo "连接成功<br/>";
  20. } catch (PDOException $e) {
  21. die ("Error!: " . $e->getMessage() . "<br/>");
  22. }
  23. $pdo->exec("set names utf8"); //设置字符集
  24. // PDO 增,用几种方式实现,其余的可以借鉴一下添加操作
  25. 1.1
  26. $stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( :touser,:fromuser)");
  27. $stmt->bindParam(":touser", $param1, PDO::PARAM_STR); //第三个参数不加也没有影响
  28. $stmt->bindParam(":fromuser", $param2);
  29. $param1 = 'touser';
  30. $param2 = 'fromuser';
  31. $stmt->execute();
  32. echo "增:影响行数:".$stmt->rowCount();//影响行数
  33. echo "增:最后ID:".$pdo->lastInsertId();//自增id
  34. echo '<br>';
  35. //1.2
  36. $stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( :touser,:fromuser)");
  37. $stmt->execute(
  38. array(':touser' => 'a',':fromuser'=>'b')
  39. );
  40. echo "增:影响行数:".$stmt->rowCount();//影响行数
  41. echo "增:最后ID:".$pdo->lastInsertId();//自增id
  42. echo '<br>';
  43. //2.1
  44. $stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( ? , ?)");
  45. $stmt->bindParam(1, $param1);
  46. $stmt->bindParam(2, $param2);
  47. $param1 = 1;
  48. $param2 = 'fromuser';
  49. $stmt->execute();
  50. echo "增:影响行数:".$stmt->rowCount();//影响行数
  51. echo "增:最后ID:".$pdo->lastInsertId();//自增id
  52. echo '<br>';
  53. //2.2
  54. $stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( ? , ?)");
  55. $stmt->execute(
  56. array('touser','fromuser')
  57. );
  58. echo "增:影响行数:".$stmt->rowCount();//影响行数
  59. echo "增:最后ID:".$pdo->lastInsertId();//自增id
  60. echo '<br>';
  61. // 3,批量添加
  62. echo "批量添加";
  63. $stmt = $pdo->prepare("INSERT INTO tg_message (tg_touser,tg_fromuser) VALUES ( ? , ?)");
  64. $arr = array(
  65. array('1','1'),
  66. array('2','2')
  67. );
  68. foreach ($arr as $val) {
  69. $stmt->execute( $val );
  70. echo '<br>';
  71. echo "增:影响行数:".$stmt->rowCount();//影响行数
  72. echo "增:最后ID:".$pdo->lastInsertId();//自增id
  73. }
  74. // PDO 删
  75. $stmt = $pdo -> prepare("DELETE FROM tg_message WHERE tg_id = ?");
  76. $stmt->execute(array(30));
  77. echo "删:影响行数:".$stmt->rowCount();//影响行数
  78. echo '<br>';
  79. // PDO 改
  80. $stmt = $pdo -> prepare("UPDATE tg_message SET tg_touser = ? WHERE tg_id = ?");
  81. $stmt->execute(array('newname','2'));
  82. echo "改:影响行数:".$stmt->rowCount();//影响行数
  83. echo '<br>';
  84. // PDO 查
  85. $stmt = $pdo -> prepare("SELECT tg_id,tg_touser FROM tg_message WHERE tg_id > ?");
  86. $stmt->execute(array(6));
  87. echo "查:影响行数:".$stmt->rowCount();//影响行数
  88. echo '<br>';
  89. echo '显示搜索到的结果:';
  90. while($result=$stmt->fetch(PDO::FETCH_ASSOC)){
  91. var_dump($result);
  92. echo '<br>';
  93. }
  94. ?>
使用mysqli和PDO实现预处理过程中 参数相同和不同,实现相同功能的对比

相同:

  • 准备预处理语句相同 => 都是数据库对象 -> prepare
    $pdo->prepare
    $conn->prepare

    不同:
    设置字符集
       mysqli
           $conn->set_charset( “utf8” ); // 设置字符集
       PDO
            $pdo->exec(“set names utf8”); //设置字符集

    绑定参数写法不同用法不同,这里只介绍写法
       mysqli
            $stmt->bind_param(“ss”, $param1,$param2);
       PDO
           $stmt->bindParam(“:touser”, $param1, PDO::PARAM_STR); //第三个参数不加也没有影响

获得影响行数有所不同
    mysqli
        $stmt - > affected_rows
       $stmt - > num_rows
    PDO
        $stmt - > rowCount();//增删改查都使用这一个就行,注意有括号

获得 最后插入行的ID或序列值 不同
    mysqli
        $stmt->insert_id
    PDO
        $pdo->lastInsertId()

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