SQL预处理语句

概念

预处理语句是一种特殊的数据库操作方式,先定义一个SQL语句模板,然后再填充具体的数据。

作用

防止SQL注入

  • 参数化查询:在预处理语句中,数据是通过参数传递的,而不是直接拼接到SQL语句中。这意味着即使参数中包含SQL命令,数据库也不会将其解释为SQL命令,因为数据库在预处理阶段已经确定了SQL语句的结构。

  • 自动转义:数据库接口会自动对传递的参数值进行转义,这可以防止特殊字符被解释为SQL语法的一部分。

优化代码结构

  • 编译优化:数据库可以预先编译SQL语句模板,当使用相同的模板但不同参数执行多次操作时,可以减少编译时间。

SQL语句预处理

1.连接数据库

$address = '127.0.0.1';

$lname = 'root';

$lpasswd = 'root';

initalize_con = new mysqli(address,lname,lpasswd)

2.准备SQL语句模板

使用占位符(?)代替实际写入的参数

$sql = "INSERT INTO login.login_tables(name,password)VALUE(?,?)";

3.使用mysqli对象内prepare()方法准备SQL语句

prapare():mysqli对象方法

用于准备一个SQL语句,以便后续使用。

接受一个SQL语句作为参数,返回一个mysqli_stmt对象,该对象用于后续的参数绑定和执行。

stmt = initalize_con->prepare($sql);

4.使用mysqli_stmt对象中bind_param()方法绑定参数及其类型

bind_param():mysqli_stmt对象方法

用于将PHP变量与SQL语句中的参数占位符绑定,并指定参数的数据类型。类型指定符如下:

  • s:字符串
  • i:整数
  • d:双精度浮点数

stmt-\>bind_param("ss",name,$passwd);

5.添加数据

6.运行SQL语句

execute():``mysqli_stmt对象

用于执行一个预处理的SQL语句。根据语句类型的不同,可以直接使用变量接收,或通过调用get_result()获取查询结果集。

end = stmt->execute();

7.使用get_result接收查询sql语句执行后的结果集对象

get_result():mysqli_stmt对象

获取预处理语句的执行结果,并返回一个mysqli_result对象,该对象包含了查询结果集。

对于非查询类SQL语句(如INSERTUPDATEDELETE),使用get_result()会返回false,因为这些操作不返回结果集,它们只是对数据库进行修改。

res = stmt->get_result();

8.关闭预处理和数据库连接

关闭预处理用于释放资源,避免报错,编码规范

$stmt->close();

$initalize_con->close();

相关推荐
待什么青丝几秒前
【linux】驱动学习问题及解决方法
linux·数据库·学习
天天爱吃肉821812 分钟前
《零基础读懂新能源汽车》——V2G/电池梯次利用/氢能源生态级技术拆解与商业预言
数据库·python·汽车·能源·创业创新
skywalk81631 小时前
超强人工智能解决方案套件InfiniSynapse:精准的业务理解、对各种数据源进行全模态联合智能分析--部署安装@Ubuntu22.04 & @Docker
数据库·人工智能·python·docker·infini-synapse
纪伊路上盛名在2 小时前
jupyter内核崩溃
前端·数据库·jupyter·生物信息·基因组·k-mer
曼汐 .2 小时前
Python实战应用-Python操作MySQL数据库
数据库·mysql
bcxwz6692 小时前
mysql 创建大写字母的表名失败
数据库·mysql
数据知道2 小时前
【系统分析师】第5章-基础知识:数据库系统(核心总结)
数据库·数据库系统·系统分析师
Mr_Xuhhh2 小时前
数据库期末
数据库·oracle
vace cc2 小时前
sql列中数据通过逗号分割的集合,对其中的值进行全表查重
数据库·sql
虾条_花吹雪3 小时前
5、Spring AI(MCPServer+MCPClient+Ollama)开发环境搭建_第一篇
数据库·人工智能·学习·spring·ai