Blogger Information
Blog 8
fans 0
comment 0
visits 14528
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php之预处理(msqli和PDO)
熟悉的新风景
Original
1195 people have browsed it

哎,身为一个穷逼,以前自学在网上找的好几年前的视频,学的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()

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