java sql预处理_SQL语句预处理

PDO作为PHP数据对象,提供了一致的数据库访问接口。通过预处理SQL语句,可以实现更高效的执行和安全性,防止SQL注入。预处理分为两步:先提取SQL结构并编译,然后绑定变量执行。预编译使用`prepare()`方法,绑定数据使用`bindValue()`,最后通过`execute()`执行预处理语句。
摘要由CSDN通过智能技术生成

PDO (Php Date Object)PHP数据对象

PDO是PHP数据对象(PHP Data Object)的缩写。

PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口;

PDO作用是统一各种数据库的访问接口,PDO让跨数据库的使用更具亲和力;

有了PDO,我们不必再使用mysqli_*函数、oci_*函数或者mssql_*函数,也不必再为它们封装数据库操作类,只需要使用PDO接口中的方法就可以对各种数据库进行操作。

PDO是一个第三方的类,默认已经集成到PHP中了

PDO的访问流程图

3abe1f89cc58685ba7e99133e4c76e5a.png

SQL语句预处理

1. SQL语句执行过程

SQL语句的执行,分成两个阶段:编译和执行。

如果SQL语句,是第1次执行,先编译再执行。编译过程十分复杂,耗用系统资源,相对不太安全;

如果SQL语句(即相同的SQL语句),是第2次执行,直接从缓存中读取,无疑执行效率是最高的,也是比较安全的,可以有效避免SQL注入等安全问题;

29328d65127e6c246ced1918b71a3810.png

2. PDO的SQL语句预步骤

PDO完成预处理需要的步骤

a、先提取相同结构的sql部分!(将数据部分,可变的部分去掉)

b、编译这个相同的结构!将编译结果保存!

c、再将不同的数据部分进行替换!

d、执行即可!

提取相同结构的SQL语句 a、在SQL语句中,使用命名参数和问号参数,来代替可变的数据。

b、使用占位符":value"和"?"来代替可变的数据。

预编译相同结构的SQL语句

a、描述:执行预编译的SQL语句结构,并返回一个PDOStatement对象。

b、语法:public PDOStatement PDO::prepare ( string $statement )

c、返回:执行成功返回PDOStatement对象,失败返回FALSE。 //预编译相同结构的sql语句:含有占位符的sql语句

//$dsn,数据源名称或叫做 DSN,包含了请求连接到数据库的信息。通常,一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成。

$dsn = "mysql:host=loccalhost;post=3306;dbname=test;charset=utf8";

$user = "root";

$pwd = "root";

//创建PDO类的对象

$pdo = new PDO($dsn, $user, $pwd);

$PDOStatement = $pdo->prepare($sql);

var_dump($PDOStatement);

结果: object(PDOStatement)#2(1){

...

insert into student(name,age) values(:name, :age)

}

给占位符绑定数据

①描述:绑定一个值到预处理的 SQL 语句中的对应命名占位符或问号占位符。

②语法:bool PDOStatement::bindValue ( mixed $parameter , mixed $value ) ③参数:

a、$parameter,参数标识符。对于使用命名占位符的预处理语句,应是类似:name形式的参数名。对于使用问号占位符的预处理语句,应是以1开始索引的参数位置。

b、$value,绑定到参数的值; ④返回:成功时返回 TRUE, 或者在失败时返回 FALSE。

执行预处理的SQL语句

a、描述:执行一条预处理语句

b、语法:bool PDOStatement::execute( )

c、返回:成功时返回 TRUE, 或者在失败时返回 FALSE。 ":value"占位符综合示例:

//$dsn,数据源名称或叫做 DSN,包含了请求连接到数据库的信息。通常,一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成

$dsn = "mysql:host=loccalhost;post=3306;dbname=test;charset=utf8";

$user = "root";

$pwd = "root";

//创建PDO类的对象

$pdo = new PDO($dsn, $user, $pwd);

//构建插入的sql语句:提取相同结构部分,数据用占位符代替

$sql = "insert into student(name, age) values (:name, :age)";

//预编译相同结果的sql语句:含有占位符的sql语句

$PDOStatement = $pdo->prepare($sql);

//给站位符绑定真正数据

$PDOStatement->bindValue(":name", "张三");

$PDOStatement->bindValue(":age", 18);

//执行绑定数据的sql

$PDOStatement->execute();

"?"占位符综合示例:

//$dsn,数据源名称或叫做 DSN,包含了请求连接到数据库的信息。通常,一个 DSN 由 PDO 驱动名、紧随其后的冒号、以及具体 PDO 驱动的连接语法组成

$dsn = "mysql:host=loccalhost;post=3306;dbname=test;charset=utf8";

$user = "root";

$pwd = "root";

//创建PDO类的对象

$pdo = new PDO($dsn, $user, $pwd);

$sql = "insert into student(name, age) values (?,?)";

//预编译相同结果的sql语句:含有占位符的sql语句

$PDOStatement = $pdo->prepare($sql);

//给站位符绑定真正数据

$PDOStatement->bindValue("1", "张三");

$PDOStatement->bindValue("2", 18);

//执行绑定数据的sql

$PDOStatement->execute();

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值