通过PDO扩展与MySQL数据库交互如何实现增删改查和数据库事务

  介绍

通过PDO扩展与MySQL数据库交互如何实现增删改查和数据库事务?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

通过预处理语句进行增删改查

为什么使用预处理语句

关于预处理语句我们在上篇教程中已经简单介绍过,我们可以将其与视图模板类比,所谓预处理语句就是预定义的SQL语句模板,其中的具体参数值通过占位符替代:

插入注册(名称,值)值(?, ?)   插入注册(名称、值)值(名称、:价值)

然后在后续真正要执行SQL语句之前,再通过特定API方法将具体参数值与对应占位符进行绑定和映射。就好比定义的视图模板也是将变量通过特定占位符替代,然后真正渲染时将变量值传递进来填充和渲染一样。

为什么要费这番周折呢?直接用前面演示的查询<代码> 方法进行增删改查操作它不香吗?呃,那我们接下来来说说预处理语句的好处,或者说为什么要使用预处理语句进行数据库交互,好处有二:

    <李>首先,使用预处理语句提前定义的SQL模板只会解析一次,但可以通过传递不同的参数值执行多次,从而避免模板相同的SQL语句重复分析,编译和优化,提高数据库操作执行速度; <李>其次,后期传递给预处理语句的参数值会被底层驱动进行处理,从而有效避免SQL注入攻击。

综上,从性能和安全角度考虑,推荐使用预处理语句处理数据库的增删改查操作。

增删改查示例代码

接下来,我们基于PDO提供的预处理语句API实现MySQL数据库的增删改查操作,我们将通过面向对象的方式来实现:

& lt; php ?   类职位   {   公共$ id;   公共美元标题;   美元的公共内容;   公共created_at美元;/* *   * @var PDO   */保护pdo美元;      公共函数__construct (PDO PDO美元=null)   {   如果(pdo。美元=null) {   $ this→pdo=$ pdo;   }   }      公共函数插入(标题、内容)美元   {   $ sql=& # 39;插入“post”(标题、内容、created_at)值(:标题,内容:created_at) & # 39;;   尝试{//准备预处理语句=$美元支撑这→pdo→准备($ sql);//获取当前时间对应的格式化字符串:2020-05-28 13:00:00   $ datetime=日期(& # 39;Y-m-d H:我:& # 39;,时间());//绑定参数的值   美元支撑→bindParam(& # 39;:标题# 39;美元标题,PDO:: PARAM_STR);   美元支撑→bindParam(& # 39;:内容# 39;美元内容,PDO:: PARAM_STR);   美元支撑→bindParam (& # 39;: created_at # 39;, datetime美元,PDO:: PARAM_STR);//执行语句   美元支撑→执行();   返回$ this→pdo→lastInsertId ();//返回插入记录对应的ID   }捕捉(PDOException $ e) {   printf(“数据库插入失败:% s \ n", e→美元getMessage ());   }   }      公共函数选择($ id)   {   $ sql=& # 39; SELECT * FROM post的id=哪里? & # 39;;   尝试{//准备预处理语句=$美元支撑这→pdo→准备($ sql);//绑定参数的值   美元支撑→bindValue (1、$ id, PDO:: PARAM_INT);//执行语句   美元支撑→执行();   返回美元支撑→fetchObject (self::类);//以对象方式返回结果集   }捕捉(PDOException $ e) {   printf(“数据库查询失败:% s \ n", e→美元getMessage ());   }   }      公共函数selectAll ()   {   $ sql=& # 39; SELECT * FROM“post”订单的id desc # 39;;   尝试{//准备预处理语句=$美元支撑这→pdo→准备($ sql);//执行语句   美元支撑→执行();   返回美元支撑→fetchAll ();//返回所有结果集   }捕捉(PDOException $ e) {   printf(“数据库查询失败:% s \ n", e→美元getMessage ());   }   }      公共函数更新($ id)   {   $ sql=& # 39;更新“post”设置created_at=: created_at id=: id # 39;;   尝试{//准备预处理语句=$美元支撑这→pdo→准备($ sql);   $ datetime=日期(& # 39;Y-m-d H:我:& # 39;,时间());//绑定参数的值   美元支撑→bindParam (& # 39;: created_at # 39;, datetime美元,PDO:: PARAM_STR);   美元支撑→bindValue (& # 39;: id # 39; $ id, PDO:: PARAM_INT);//执行语句   美元支撑→执行();   返回美元支撑→rowCount ();   }捕捉(PDOException $ e) {   printf(“数据库更新失败:% s \ n", e→美元getMessage ());   }   }      公共函数删除($ id)   {   $ sql=& # 39;从“post”删除id=哪里? & # 39;;   尝试{//准备预处理语句=$美元支撑这→pdo→准备($ sql);//绑定参数的值   美元支撑→bindValue (1、$ id, PDO:: PARAM_INT);//执行语句   美元支撑→执行();   返回美元支撑→rowCount ();   }捕捉(PDOException $ e) {   printf(“数据库删除失败:% s \ n", e→美元getMessage ());   }   }   }

通过PDO扩展与MySQL数据库交互如何实现增删改查和数据库事务